为什么Forth使用IF语句THEN ...而不是ENDIF?

时间:2012-09-22 00:14:20

标签: history language-design forth

为什么Forth使用IF语句那么......而不是ENDIF?

我正在实现一个(不符合的)Forth编译器。基本上,就IF语句而言,Forth的语法对我来说非常直观。

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

为什么结尾语句为THEN?这使得语言对我来说非常奇怪。对于我的编译器,我正在考虑将其更改为类似ENDIF的更自然的内容。但是,首先反复IF-THEN声明背后的理由是什么?

1 个答案:

答案 0 :(得分:7)

只需将其视为“IF就是这样,执行此操作,ELSE这样做...... THEN继续......”

或者更好的是,使用引号(如FactorRetroForth,...),在这种情况下,它完全是后缀,没有特殊的编译时单词;只需从堆栈中获取地址的常规字词:[ do this ] [ do that ] if[ do this ] when[ do that ] unless。我个人更喜欢这个。

除了RE:语录

这是how quotations are compiled in RetroForth。在我自己的Forth(编译到我自己的VM)中,我只是添加了一条QUOTE指令,将下一个地址推送到堆栈并跳过n字节。预期n字节由RETURN指令终止,ifwhenunless字消耗谓词以及前面留下的地址报价;酌情打电话。确实非常简单,引用通常为all kinds of beautiful abstractions away from thinking about the stack打开了大门。