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>
总是对最新定义的单词进行操作。