私はスタック指向の仮想マシンを作成しているので、それがどのように機能するかについての一般的な理解のためにForthを学び始めました。次に、仮想マシンに実装する必要のある重要なスタック操作操作をリストしました。
drop ( a -- )
dup ( a -- a a )
swap ( a b -- b a )
rot ( a b c -- b c a )
次の4つのスタック操作操作を使用して、他のスタック操作操作をシミュレートできると思います。例えば:
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
とはいえ、スタックを操作するために必要な基本的なスタック操作操作をすべてリストしたかどうかを知りたかったのです。
実装する必要のある基本的なスタック操作操作はありますか?それがないと、私の仮想マシンは完全なチューリングではありませんか?
3
Postcriptにも興味があるかもしれません。
—
mouviciel 2012
2番目のリストのいくつかの選択肢は、スタックの長さに大きく依存していませんか?たとえば
—
Marjan Venema
rot rot
の代わりとして-rot
?スタックに4つ以上のアイテムがあるとどうなりますか?あなたがしてする必要はないrot
としてしばしばLength-1
倍を達成するのは-rot
?
はい、そうです。そのため、@ mouvicielの回答を受け入れました。代わりに
—
Aadit M Shah
dup
、swap
そしてrot
私が使用pick ( a_n ... a_0 n -- a_n ... a_0 a_n)
してroll ( a_n ... a_0 n i )
代わりに。i
が負の場合roll
、要素を左にシフトします。他の右側に。
チューリング完全性について-あなたは興味があるかもしれませんプログラミング言語がチューリング完全であるための最低基準はありますか?コンピュータサイエンススタック交換から。また、CS.SEは、スタックマシンを完全にチューリングするために必要な操作を要求するのに適した場所かもしれません。
SWAPはDUP ROT ROT DROPで実装できることに注意してください。
—
Gort the Robot