我正在使用Gforth,我想在定义中创建一个单词。在Gforth的cmd行中,我可以输入:
create foo
ok
或者更具体地说,我定义了一个数组函数,它需要堆栈上的大小并创建一个带有该数组地址的单词:
: array ( n -- ) ( i -- addr)
create cells allot
does> cells + ;
因此,如果我输入10 array foo
,我可以稍后再使用foo
。
但如果我在另一个定义中编写10 array foo
,它会给我一个编译错误。我已经尝试用编译的s" foo"
替换foo,但它在运行时爆炸,说:
尝试使用零长度字符串作为名称
有办法做到这一点吗?
答案 0 :(得分:3)
在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 ;
答案 1 :(得分:0)
我想您想做的大部分事情都可以通过定义单词来完成,即使用create ... does> ...
来定义具有特殊行为的单词。
例如:
: 2const create , , does> 2@ ;
可用于创建双常量,例如2 3 2const a-double
(将2和3存放在a-double
中),然后a-double
推入两个值(2 3)。