2016-12-15 11 views
2

drracketにlabel、goto、jumpコマンドのパッケージはありますか?label、drracketのgotoコマンド

Controlパッケージには、次のエラーを与える:

(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

ので、ループを使用して書き換えはオプションではありません、LLVM IRのコードを実行するための後藤/ジャンプ、ラベルをシミュレートする必要があります。

+0

ループを使用して書き換えますか? –

+0

'goto'から' loop'への変換は自動化できないので、私の目的に合わないでしょう – sinhayash

+0

コントロールパッケージが更新されました。試してみてください。うまくいかない場合は教えてください(Githubを更新してからパッケージサーバーを起動するまで少し時間がかかることがあります)。 ラケット "最近"新しいマクロエクスパンダに切り替えました。コントロールパッケージはむしろ古いパッケージなので、新しいエクスパンダではなく古いエクスパンダで動作するトリックを使用していました。 – soegaard

答えて

3

まず、soegaardのControlパッケージが正しく動作していないことは明らかです。ここ数年で起こっているSyntaxシステムのアップデートが原因であると推測しています。

2番目:LLVMをシミュレートしている場合は、ラベルや謝辞は必要ありません。コードを基本ブロックに分割し、各基本ブロックを関数としてモデル化します。そして、すべてのgotoは関数呼び出しになります。あなたは間違いなくこれを自動化することができます。

申し訳ありません。詳細が必要な場合はお知らせください。

+0

どのように人にタグを付けますか? soegaard? @soegaard? + soegaard? grr ... –

+0

うん、何か新しいエキスパンダーで起こったにちがいない。私は見てみましょう。また、タグ付けはすでにディスカッションに参加している人(私が知る限り)でのみ機能します。 – soegaard