2016-12-15 1 views
2

Gibt es irgendwelche Pakete für Label, Goto, Sprungbefehle in drracket?label, goto befehle in drracket

Das Control Paket gibt den folgenden Fehler:

(let ([x 1]) 
    (let/ec return 
     (begin/goto 
     (label l1) 
     (set! x (+ x 1)) 
     (when (= x 10000000) 
      (return x)) 
     (goto l1) 
     2))) 

goto: undefined;

cannot reference undefined identifier

Need Etikett zu simulieren, goto/Sprung für Code in LLVM IR ausgeführt wird, so Umschreiben Loops ist keine Option.

+0

Mit Loops neu schreiben? –

+0

Konvertierung von 'goto' nach' loop' kann nicht automatisiert werden, daher wird es nicht meinem Zweck entsprechen – sinhayash

+0

Das Kontrollpaket wurde nun aktualisiert. Bitte versuchen Sie es und lassen Sie es mich wissen, wenn es nicht funktioniert (es könnte eine kleine Verzögerung von der Aktualisierung auf Github zum Paketserver geben, der es aufnimmt). Racket "vor kurzem" auf einen neuen Makroexpander umgeschaltet. Das Kontrollpaket ist ziemlich alt, also verwendete es Tricks, die auf dem alten Expander und nicht auf dem neuen funktionierten. – soegaard

Antwort

3

Erstens: Es ist klar, dass das Control-Paket von soegaard nicht richtig funktioniert, und ich vermute, es liegt an den Aktualisierungen des Syntax-Systems, die in den letzten Jahren stattgefunden haben.

Zweitens: Wenn Sie LLVM simulieren, benötigen Sie keine Labels und GOTOs. Zerlegen Sie den Code in Basisblöcke und modellieren Sie jeden Basisblock als Funktion. Dann wird jeder goto zu einem Funktionsaufruf. Sie können das auf jeden Fall automatisieren.

Es tut uns leid, kurz zu sein. Lassen Sie mich wissen, wenn Sie mehr Details benötigen.

+0

Wie markieren Sie Leute? Soegaard? @soegaard? + soegaard? grr ... –

+0

Ja - etwas muss mit dem neuen Expander passiert sein. Ich werde es mir ansehen. Außerdem: Tagging funktioniert nur für Personen, die bereits in der Diskussion sind (soweit ich weiß). – soegaard