为什么我在 gforth 随机数生成器 random.fs 中出现此错误?

问题描述 投票:0回答:1

我正在尝试这个词

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

这样对吗?

random forth gforth
1个回答
0
投票
    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 ;
© www.soinside.com 2019 - 2024. All rights reserved.