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 rotals Alternative für -rot? Was passiert, wenn sich mehr als 3 Elemente auf dem Stapel befinden? Müssten Sie dann nicht rotso oft wie möglich Length-1, um dies zu erreichen -rot?
dup, swapund rotich verwenden pick ( a_n ... a_0 n -- a_n ... a_0 a_n)und roll ( a_n ... a_0 n i )stattdessen. Wenn inegativ ist roll, werden die Elemente nach links verschoben. sonst rechts.