Tôi đang tạo một máy ảo định hướng ngăn xếp, và vì vậy tôi bắt đầu học Forth để hiểu một cách tổng quát về cách nó sẽ hoạt động. Sau đó, tôi liệt kê danh sách các thao tác thao tác ngăn xếp cần thiết mà tôi sẽ cần thực hiện trong máy ảo của mình:
drop ( a -- )
dup ( a -- a a )
swap ( a b -- b a )
rot ( a b c -- b c a )
Tôi tin rằng bốn thao tác thao tác ngăn xếp sau đây có thể được sử dụng để mô phỏng mọi thao tác thao tác ngăn xếp khác. Ví dụ:
nip ( a b -- b ) swap drop
-rot ( a b c -- c a b ) rot rot
tuck ( a b -- b a b ) dup -rot
over ( a b -- a b a ) swap tuck
Điều đó đang được nói tuy nhiên tôi muốn biết liệu tôi đã liệt kê tất cả các hoạt động thao tác ngăn xếp cơ bản cần thiết để thao tác ngăn xếp theo bất kỳ cách nào có thể.
Có bất kỳ thao tác thao tác ngăn xếp cơ bản nào nữa mà tôi sẽ cần phải thực hiện, mà không có máy ảo nào của tôi sẽ không hoàn thành?
rot rot
như là một thay thế cho -rot
? Điều gì xảy ra khi có nhiều hơn 3 mục trên ngăn xếp? Sau đó, bạn có phải rot
thường xuyên Length-1
đạt được -rot
không?
dup
, swap
và rot
tôi sử dụng pick ( a_n ... a_0 n -- a_n ... a_0 a_n)
và roll ( a_n ... a_0 n i )
thay vào đó. Nếu i
là âm thì roll
dịch chuyển các phần tử sang trái; khác bên phải.