我创建了一个数组,并想用数字填充它。我使用了一个循环,但转到下一个时会破坏上一个项目:
create mass 2 2 * CELLS ALLOT
: [!] ( value index array -- ) + ! ;
: show
4 0 DO mass I + ? LOOP ;
: fill
4 0 DO I I mass [!] show CR LOOP ;
fill
3 3 mass !
show
...所以show-word
一步一步给了我
0 0 0 0
256 1 0 0
131328 513 2 0
50462976 197121 770 3
此外,在3 3 mass !
之后,show-word
给了我这个
3 0 0 0 ok
我不了解如何处理数组以及循环中发生了什么,为什么在3 3 mass !
之后不能返回循环中的内容..请帮忙。
(我知道我的问题现在都在讨论第四部分……对不起)
答案 0 :(得分:3)
+
和[!]
中的show
单词将简单地将索引作为数字添加到地址,从而产生与单元格大小不匹配的新地址。这就是为什么您损坏mass
的内容,并且也看不到show
正确包含其内容的原因。
在不改变单词堆叠效果的情况下,此修复程序可能如下所示:
create mass 2 2 * CELLS ALLOT
: [!] ( value index array -- ) swap cells + ! ;
: show
4 0 DO mass I cells + ? LOOP ;
: fill
4 0 DO I I mass [!] show CR LOOP ;
fill
3 3 mass [!]
show
请注意cells
一词,它将把索引转换为大小正确的偏移量到数组中。
编辑:在上一次手动分配中,请使用您的[!]
字,或将索引3转换为正确的偏移量,如@ dave_thompson_085在评论中所述。