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



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

我正在实现一个(不符合)Forth 编译器的东西。基本上,关于 IF 语句,Forth 的语法对我来说似乎非常违反直觉。

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

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

可以把它想象成,"IF是这样,做这个,ELSE做那个......THEN继续..."

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

旁谈:引文

以下是在RetroForth中编译引文的方式。在我自己的 Forth(编译到我自己的 VM)中,我只是添加了一个 QUOTE 指令,该指令将下一个地址推送到堆栈并跳过 n 字节。n字节应由RETURN指令终止,ifwhenunless词使用谓词以及前面引号留下的地址;酌情调用。确实非常简单,引文通常为各种美丽的抽象打开了大门,而不是考虑堆栈。

最新更新