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 ,但它在运行时爆炸,说:
尝试使用零长度字符串作为名称
有没有办法做到这一点?
在 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)