Forth/堆疊操作
外觀
< Forth
引數堆疊
堆疊是一種常見於多種語言的資料結構。一種被稱為引數堆疊(為了區別於返回堆疊)的 LIFO(後進先出)型別的堆疊,在 FORTH 中經常是許多資料和算術操作的隱式來源和目的地。
典型的操作會在堆疊上找到它們的輸入引數,通常會移除(彈出)這些輸入,然後將新的結果放回堆疊(壓入)。
雖然 FORTH 有變數、陣列、字串和其他資料結構,但堆疊的使用與語言的哲學相結合,以實現多種優勢。
- 如果一段程式碼僅使用堆疊作為其輸入、輸出和中間值,那麼它幾乎在所有情況下都是本質上可重入的。
- 如果一段程式碼保持堆疊奇偶性,也就是說,它在開始和結束之間不會從堆疊上移除或遺棄任何值,那麼可以在程式碼主體中的任何地方插入對它的呼叫。
- 堆疊就像一個調車場,可以從任何地方獲取資料併發送到任何地方。透過讀取或寫入堆疊頂部的元素,資料可以在系統的各個部分之間進行切換。
- 操作碼不需要使用位來指定暫存器值,而是依次使用兩個 RISC 樣式的機器指令,類似於 LOAD 然後 ADD。這些更簡單的指令允許高效實現。
當你輸入一個數字時,它會進入堆疊。當你輸入多個數字時,它們都會進入堆疊,最近的數字位於堆疊頂部。例如,在輸入 7 22 -8 14 9 並按下 ENTER 後,堆疊看起來像這樣
cell # contents
0 9 (TOS)
1 14 (NOS)
2 -8
3 22
4 7
許多程式設計師使用堆疊圖來記錄一個詞,在詞執行之前和之後使用兩個堆疊的“影像”(TOS 最右邊)。
SWAP ( ... a b -- ... b a )
DROP ( ... x y z -- ... x y )
DUP ( ... x y z -- ... x y z z )
ROT ( ... a b c d -- ... a c d b )