我的目标是在 Forth 中构建一个素数生成器。不是 Eratosthenes 的筛子,而是两个嵌套循环,它们对数字 A 和数字 B 的所有组合进行暴力破解。在源代码中,我对循环有一个词,用于测试条件是否为真,并尝试进行嵌套循环。但是在使用 gforth 执行代码后,会显示堆栈下溢错误。也许某处缺少某种 dup,但循环中的 i 和 j 索引也有可能是错误的。问题是,如果我更改代码中的某些内容,堆栈就会不同。这意味着,在将 for 循环的索引号放到屏幕上之后,就无法再访问该数字了。我还发现很难访问变量,因为 Forth 似乎根本没有变量。所以我创建了一个辅助变量,
我知道,代码看起来有点混乱,有人可以帮忙吗?
variable temp
: numbers
10 0 do i . loop
;
: cond
0 dup
0 = if ." equal 0" endif
;
: plain
10 2 mod .
10 3 mod .
10 4 mod .
10 5 mod .
10 6 mod .
10 7 mod .
10 8 mod .
10 9 mod .
;
: plain2
10 temp !
\ 10 0 do temp @ i mod . loop
\ 10 0 do temp @ . i . loop
10 2 do temp @ i mod . cond loop
;
: cond2 ( n - n )
10 2 do i
10 2 do i
mod .
loop cr loop
;
: main
\ numbers
cond2
\ plain
\ plain2
;
main
CR bye