在 Forth 中,如果我两次调用 DOES>会发生什么?



John Hayes的ANS Forth测试套件包含如下测试:

: WEIRD: CREATE DOES> 1 + DOES> 2 + ; 
WEIRD: W1
W1

我不知道这到底应该做什么。关于DOES>的ANS第四规范在很大程度上是难以理解的。

从阅读测试套件来看,它看起来像是期待第一次调用DOES>来修改W1,但随后调用W1激活第二个 DOES>。我假设第二个操作对最近调用CREATE所定义的单词进行操作,但这已经被DOES>化了,所以我不确定它应该做什么。

gforth通过了测试集,因此测试看起来确实有效;但是我的宠物Forth解释器没有,我需要弄清楚如何使它工作…

第二次调用DOES>也修改了W1

WEIRD:创建W1,运行时动作为1 + DOES> 2 +。第一次调用W1将运行时设置为2 +

如果你改变代码来打印一些东西,这是更明显的,例如

: weird:   create  does> drop ." ONE"  does> drop ." TWO" ; ok
weird: w1 ok
w1 ONE ok
w1 TWO ok
w1 TWO ok
w1 TWO ok

这是因为DOES>总是对最新定义的单词进行操作。

相关内容

  • 没有找到相关文章