Ear*_*rlz 6 history language-design forth
为什么Forth使用IF语句THEN ...而不是ENDIF?
我正在实现一个(不符合的)Forth编译器的东西.基本上,对于IF语句,Forth的语法对我来说非常直观.
IF ."Statement is true"
ELSE ."Statement is not true"
THEN ."Printed no matter what;
Run Code Online (Sandbox Code Playgroud)
为什么结尾语句是THEN?这使得语言对我来说非常奇怪.对于我的编译器,我正在考虑将其更改ENDIF为更自然的内容.但是,首先归还IF-THEN语句的理由是什么?
试想一下," IF就是这样,做到这一点,ELSE做到这一点...... THEN继续......"
或者更好的是,使用引用(如因子,RetroForth,......)在这种情况下它完全是后缀而没有特殊的编译时单词; 只是经常服用的话从堆栈地址:[ do this ] [ do that ] if或[ do this ] when或[ do that ] unless.我个人更喜欢这个.
除了RE:报价
以下是在RetroForth中编译报价的方式.在我自己的Forth(编译到我自己的VM)中,我只是添加了一条QUOTE指令,将下一个地址推送到堆栈并跳过n字节.预计该n字节由终止RETURN指令和if,when,unless字与由前述报价留下的地址(ES)沿着消耗谓语; 酌情打电话.确实很简单,引用通常为各种美丽的抽象打开了大门,远离思考堆栈.