我正在尝试这个词
shuffle
:
: random-range ( n -- r )
dup 1- random mod
;
: shuffle ( array len -- )
1- 0 do
i random-range swap rot over !
loop ;
但是 gforth 给出了这个错误:
~/gforth/random.fs:34: Undefined word
user rng-state $10 >>>cell-<<< uallot drop
Backtrace:
$107349A20 throw
$10735FCC0 no.extensions
$107349CE0 interpreter-notfound1
这是我从
这里获取的
random.fs
扩展中的第34行
cell
被列为 单词索引 中的单词
那么,我不明白为什么会出现这个错误?你能帮忙吗?
编辑
当我这样做时
see cell
我得到这个:
see cell
8 Constant cell
ok
这样对吗?
user rng-state $10 >>>cell-<<< uallot drop ```
关于
cell-
的错误(不是 cell
— 它们是不同的词)。该消息意味着未找到单词 cell-
。您可能使用的是过时版本的 Gforth。
在包含
cell-
之前尝试将 random.fs
定义为:
: cell- ( n -- n ) 1 cells - ;
您的
random-range
不正确,有时会导致除以零。
shuffle
也是不正确的。尝试在每个命令后编写堆栈注释,如下所示:
: shuffle ( array len -- )
1- 0 ( array len-1 0 )
\ NB: it loops almost forever if len=1
do ( array )
i random-range ( array rnd )
swap ( rnd array )
rot ( rnd array x ) \ stack underflow
over ! ( rnd ) \ It tries to write array at unknown address
loop ;