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

标签 forth

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

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

我不知道这到底应该做什么。 ANS Forth SpecificationDOES>基本上是无法穿透的。

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

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

关于forth - 在 Forth 中,如果我调用 DOES> 两次会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31898277/

相关文章:

forth - 如何在 Forth 系统中正确实现 POSTPONE?

forth - 是否有用于堆栈效应的 Forth 静态分析器?

string - Gforth 在变量中存储字符串值

forth - 在 Forth 中打印双引号

forth - 可以在 Forth 中使用 BIOS 中断吗?

divide-by-zero - 为什么非零除数会引发除零错误?

forth - Forth 中的词重定义

带返回栈的第四栈注释

memory-management - Forth 中 S"..."的生命周期是多少?

performance - 算法复杂度分析 : practically using Knuth's Ordinary Operations (oops) and Memory Operations (mems) method