我创建了一个数组,想用数字填充它。我使用了一个循环,但它在转到下一个项目时破坏了上一项:
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 !
之后它给我的不是我在循环中得到的东西...... 请帮忙。
(我知道第四部分现在都在我的问题中......对不起(
[!]
和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在注释中提到的那样。