在Forth,如果我打电话给DOES>两次会发生什么?

Dav*_*ven 5 forth

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

: WEIRD: CREATE DOES> 1 + DOES> 2 + ; 
WEIRD: W1
W1
Run Code Online (Sandbox Code Playgroud)

我真的不知道应该做些什么.所述ANS第四规格DOES>是基本上不可穿透.

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

gforth通过了测试套件,因此测试看起来确实有效; 但我的宠物Forth翻译没有,我需要弄清楚如何让它工作......

Lar*_*off 6

第二次调用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
Run Code Online (Sandbox Code Playgroud)

对此的解释是DOES>始终对最新定义的单词进行操作.