如何在 Forth 定义中创建单词

xsd*_*sdf 5 definition forth gforth

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

create foo
ok
Run Code Online (Sandbox Code Playgroud)

或者更具体地说,我定义了一个数组函数,它需要堆栈上的大小并使用该数组的地址创建一个字:

: array ( n -- ) ( i -- addr)
    create cells allot
        does> cells + ;
Run Code Online (Sandbox Code Playgroud)

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

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

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

有没有办法做到这一点?

Lar*_*off 4

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

: bar   10 s" foo" ['] array execute-parsing ;
Run Code Online (Sandbox Code Playgroud)

其他实现的做法有所不同,例如http://pfe.sourceforge.net/words/w-header-015.html

在 Standard Forth 中这并不容易,但这可能就足够了:

: bar   10 s" array foo" evaluate ;
Run Code Online (Sandbox Code Playgroud)