如何在Forth定义中创建单词

时间:2013-10-24 17:34:49

标签: definition forth gforth

我正在使用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,但它在运行时爆炸,说:

  

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

有办法做到这一点吗?

2 个答案:

答案 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)。