微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Forth中设置数组元素的问题

如何解决在Forth中设置数组元素的问题

我正在用Forth编写代码,该代码应该创建一个12x12的1到8的随机数数组。

create big_array 144 allocate drop
: reset_array big_array 144 0 fill ;
reset_array 
variable rnd here rnd !
: random rnd @ 31421 * 6927 + dup rnd ! ;
: choose random um* nip ;
: random_fill 144 1 do 8 choose big_array i + c! loop ;
random_fill
: Array_@ 12 * + big_array swap + c@ ;
: show_small_array cr 12 0 do 12 0 do i j Array_@ 5 u.r loop cr loop ;
show_small_array

但是,我注意到数组中的元素128到131总是比预期的大得多:

0    4    0    4    2    6    0    5    2    5    7    3
6    3    7    3    7    7    3    1    5    0    6    1
0    3    3    0    3    1    0    7    2    0    4    5
3    7    6    6    2    1    0    2    3    4    2    7
4    7    1    5    3    5    7    2    3    5    3    6
3    0    6    4    1    3    3    2    5    4    4    7
3    2    1    4    3    4    3    7    2    6    5    5
2    4    4    3    4    5    4    4    6    5    6    0
2    5    2    7    3    1    5    0    1    4    6    7
2    0    3    3    0    7    3    6    4    1    3    6
0    1    1    6    0    3    0    2  169  112   41   70
7    2    3    1    2    2    7    6    0    5    1    2

此外,当我尝试分别更改这些元素的值时,这将导致其他三个元素更改值。例如,如果我编写代码

9 choose big_array 128 + c!

然后数组将变为:

0    4    0    4    2    6    0    5    2    5    7    3
6    3    7    3    7    7    3    1    5    0    6    1
0    3    3    0    3    1    0    7    2    0    4    5
3    7    6    6    2    1    0    2    3    4    2    7
4    7    1    5    3    5    7    2    3    5    3    6
3    0    6    4    1    3    3    2    5    4    4    7
3    2    1    4    3    4    3    7    2    6    5    5
2    4    4    3    4    5    4    4    6    5    6    0
2    5    2    7    3    1    5    0    1    4    6    7
2    0    3    3    0    7    3    6    4    1    3    6
0    1    1    6    0    3    0    2    2   12  194   69
7    2    3    1    2    2    7    6    0    5    1    2

您是否知道为什么这些特定元素总是会受到影响以及是否有防止这种情况的方法

解决方法

更好的可读性和更少的错误发生:144 allocate144 chars allocate

错误:create big_array 144 allocate dropcreate big_array 144 chars allot

错误:random um* niprandom swap mod

错误:144 1 do144 0 do

过度操作:big_array swap +big_array +

请添加堆栈注释。特别是当您寻求帮助时。

您是否知道为什么这些特定元素总是会受到影响以及是否有防止这种情况的方法?

因为您尝试在字典空间中使用内存而不保留它。此内存由Forth系统使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。