填充陣列元素

Fill array elements forth

來源: link 標籤: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 1971 121 770 3

此外,經過3個質量!show-word給了我這個: 3 0 0 0 ok

我不明白如何使用陣列以及在我的迴圈中發生了什麼,為什麼在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 在評論中提到的那樣。

  相同標籤的其他問題

forth