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 nichtrot
so oft wie möglichLength-1
, um dies zu erreichen-rot
?dup
,swap
undrot
ich verwendenpick ( a_n ... a_0 n -- a_n ... a_0 a_n)
undroll ( a_n ... a_0 n i )
stattdessen. Wenni
negativ istroll
, werden die Elemente nach links verschoben. sonst rechts.Antworten:
Viele stapelbasierte Sprachen verwenden
roll
ebenfalls eine verallgemeinerte Spracherot
für eine beliebige Anzahl von Elementen im Stapel. Sie implementieren auch die umgekehrte Operation zum Drehen des Stapels in die andere Richtung.Ich würde sagen, das
roll
ist grundlegender alsrot
.Ich habe jedoch keine Antwort auf Turingness davon.
quelle
Brent Kirby legt in seiner Theorie der verketteten Kombinatoren eine Reihe von rechnerisch vollständigen Grundlagen für Stapeloperationen fest . Sie benötigen einen Begriff für das "Zitieren" von Stapelbegriffen. Unter Verwendung seiner Nomenklatur sind die folgenden Sätze von Kombinatoren alle Turing-vollständig:
Unter Verwendung meiner bevorzugten Nomenklatur ist ein praktischer vollständiger Satz zur Implementierung:
quelle