用数字填充数组时出现问题

时间:2019-09-29 07:38:27

标签: forth

我创建了一个数组,并想用数字填充它。我使用了一个循环,但转到下一个时会破坏上一个项目:

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 !之后不能返回循环中的内容..请帮忙。

(我知道我的问题现在都在讨论第四部分……对不起)

1 个答案:

答案 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在评论中所述。