while
プログラムの言語は、計算可能に列挙可能な関数を表現できます。(これは、変数に対する算術演算が、たとえば、インクリメントとデクリメントだけであっても当てはまります。)
場合while
によって交換されfor
、常に囲まれたループを作り、言語は、唯一の原始再帰関数を表現することができます。
私は最近、基本関数のクラスに気づきました。これは、プリミティブな再帰関数の下に厳密にありますが、厳密には指数階層の上にあります。
明らかに、基本的な関数を正確にキャプチャする命令型プログラミング言語を定義することは可能です。しかし、私の質問は、
基本的な関数に限定し
while
、単純な(while
->for
)プリミティブな再帰関数への制約として説明できるプログラムの言語に構文上の変更はありますか?
for
もちろん、プログラムの制限でも十分です。おそらく、私が絶対に単純に述べたもの、余分な演算子の追加などを必要としない同等の単純さを持つものを探しているのではないことを明確にする必要があります。
編集:代表的なfor
言語の例は、Brainerd and Landweberの "Theory of Computation"(1974)のPL- {GOTO}です。この場合、各プログラムには有限数の無制限の変数があり、それぞれに自然数を含めることができます。これは基本的に次のコマンドで構成されています。
X <- 0
(変数に0を割り当てます)X <- Y
(の値をY
に割り当てますX
)X <- Y + 1
(の値の後続をY
toに割り当てますX
)LOOP X; ... END;
(含まれているコードブロックを繰り返しX
ます。変更しませんX
)
著者は、これが原始的な再帰関数を正確に表現できるという証拠を示しています。PL はのGOTO
代わりに使用するため、言語PLは質問と完全には一致しませんwhile
。PL-{GOTO}はPLから削除GOTO
することによりPLから派生します。ただし、PLプログラムはプログラムと同じくらい強力while
であり、このGOTO
除去変換は単にで置き換えるのwhile
と同じくらい簡単に述べられていfor
ます。(おそらく、おそらくさらに簡単です。)
編集2:http : //en.wikipedia.org/wiki/Total_Turing_machineは、この結果が「マイヤー、AR、リッチー、DM(1967)、ループプログラムの複雑さ、Proc。ACM全国会議の465、
LOOP
(私が呼んだものfor
)との両方を持ち、GOTO
チューリング完全ですが、GOTO
それがないとpr関数しか表現できません。質問を編集して、この言語の簡単な説明を含めます。
for
ループに対応しているといつも思っていましたが、その証拠は見たことがありません。ありますか?