8

Forth が ENDIF の代わりに IF ステートメント THEN ... を使用するのはなぜですか?

(非準拠の) Forth コンパイラーを実装しています。基本的に、Forth の構文は、IF ステートメントに関して非常に直観に反しているように見えます。

IF ."Statement is true"
ELSE ."Statement is not true"
THEN ."Printed no matter what;

なぜ終わりの言葉はTHEN? これにより、言語は私にとって非常に奇妙に読まれます。私のコンパイラでは、ENDIFより自然に読めるようなものに変更することを検討しています。しかし、そもそも逆の IF-THEN ステートメントを使用する理由は何でしたか?

4

1 に答える 1

11

「そうです、IFこれを実行し、ELSEそれを実行します...そしてTHEN続行します...」と考えてください。

または、さらに良いことに、引用符を使用します(FactorRetroForth、...のように)。この場合、特別なコンパイル時の単語なしで完全に接尾辞になります。スタックからアドレスを取得する通常の単語:[ do this ] [ do that ] ifまたは。私は個人的にこれをとても好みます。[ do this ] when[ do that ] unless

REはさておき:引用

RetroForthで見積もりをコンパイルする方法は次のとおりです。自分のForth(自分のVMにコンパイルされる)ではQUOTE、次のアドレスをスタックにプッシュしてnバイトをジャンプする命令を追加しただけです。RETURNnバイトは命令によって終了することが期待され、、、、ワードはif、先行する引用符によって残されたアドレスとともに述語を消費します。必要に応じて呼び出します。確かに非常に単純であり、引用は一般に、スタックについて考えることから離れて、あらゆる種類の美しい抽象化への扉を開きます。whenunless

于 2012-09-22T22:32:24.000 に答える