1

Forthはなぜrot演算子を実装していますか?それはなぜスタックの最も上位の3つのアイテムで動作しますか?'rot'演算子の必要性

便宜のためだけであるか、そのような指示がないとチューリング完全ではありませんか?チューリングが完了するための最小実行可能なオプションの数は3つですか?

rotpickまたはrollで実装できると思います。したがって、これらの3つの操作がない場合でも、Turing-completeとなりますか?

+1

これは基本的なスタックベースの言語であり、ジョブを完了させるためにスタックトップの値をシャッフルする必要が非常に一般的です。そのためにたくさんのボキャブラリーがあります:dup、dup、drop、swap、over、nip、tuck、rot、-rot、確かに便利です。 –

+0

@HansPassant編集を参照してください、それは便宜のためにまだ意味ですか? –

+1

多くのプロセッサがそれを実装しています。それを言語で提供するのは理にかなっています。私はIMP演算子を持つ1970年代の言語を使用しました。 – EJP

答えて

5

このトピックは、チューリング完全性とはまったく関係ありません。

rot操作は便宜的かつ効率的です。これは、swapを用いて定義することができる。

: rot (a b c -- b c a) >R SWAP R> SWAP ; 

pickrollはまた、リターンスタック(これら>RR>操作)、または任意の他のスタックを使用して実施することができます。

スタックは、メモリアクセスワードを使用して実装できます。