Ich erstelle eine stapelorientierte virtuelle Maschine und habe Forth gelernt, um ein allgemeines Verständnis dafür zu erhalten, wie es funktionieren würde. Dann habe ich die wesentlichen Stapelmanipulationsvorgänge in die engere Wahl gezogen, die ich in meiner virtuellen Maschine implementieren müsste:
drop ( a -- )
dup ( a -- a a )
swap ( a b -- b a )
rot ( a b c -- b c a )
Ich glaube, dass die folgenden vier Stapelmanipulationsoperationen verwendet werden können, um jede andere Stapelmanipulationsoperation zu simulieren. Zum Beispiel:
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
Davon abgesehen wollte ich jedoch wissen, ob ich alle grundlegenden Stapelmanipulationsoperationen aufgelistet habe, die erforderlich sind, um den Stapel auf irgendeine mögliche Weise zu manipulieren.
Gibt es grundlegendere Stack-Manipulationsoperationen, die ich implementieren müsste, ohne die meine virtuelle Maschine nicht vollständig wäre?
rot rot
als Alternative für -rot
? Was passiert, wenn sich mehr als 3 Elemente auf dem Stapel befinden? Müssten Sie dann nicht rot
so oft wie möglich Length-1
, um dies zu erreichen -rot
?
dup
, swap
und rot
ich verwenden pick ( a_n ... a_0 n -- a_n ... a_0 a_n)
und roll ( a_n ... a_0 n i )
stattdessen. Wenn i
negativ ist roll
, werden die Elemente nach links verschoben. sonst rechts.