4

我正在使用Gforth,我想在定义中创建一个词。在 Gforth 的 cmd 行中,我可以输入:

create foo
ok

或者更具体地说,我定义了一个数组函数,它期望堆栈上的大小并创建一个带有该数组地址的单词:

: array ( n -- ) ( i -- addr)
    create cells allot
        does> cells + ;

因此,如果我输入10 array foo,我可以稍后使用foo

但是如果我10 array foo在另一个定义中写它会给我一个编译错误。我试过用s" foo"which compiles 替换 foo ,但它在运行时会爆炸,说:

尝试使用零长度字符串作为名称

有没有办法做到这一点?

4

2 回答 2

4

在 gforth 中执行此操作的一种方法:

: bar   10 s" foo" ['] array execute-parsing ;

其他实现方式不同,例如http://pfe.sourceforge.net/words/w-header-015.html

在 Standard Forth 中做到这一点并不容易,但这可能已经足够好了:

: bar   10 s" array foo" evaluate ;
于 2013-10-24T17:51:13.103 回答
1

我想你想做的大部分事情都可以通过定义词来完成,即使用create ... does> ...This 允许你定义一个具有特殊行为的词。例如:

: 2const create , ,  does> 2@ ;

可用于创建双常量,例如2 3 2const a-double(将 2 和 3 隐藏在 中a-double),然后a-double推送两个值(2 3)。

于 2018-07-05T20:14:17.247 回答