Bahasa while
program dapat mengekspresikan fungsi yang dapat dihitung secara komputasi. (Ini benar bahkan jika satu-satunya operasi aritmatika pada variabel adalah, katakanlah, kenaikan dan pengurangan.)
Jika while
digantikan oleh for
, membuat loop selalu dibatasi, bahasa kemudian hanya dapat mengekspresikan fungsi rekursif primitif.
Baru-baru ini saya menjadi sadar akan kelas fungsi-fungsi dasar , yang benar-benar di bawah fungsi rekursif primitif, tetapi masih benar-benar di atas hierarki eksponensial.
Jelas akan mungkin untuk mendefinisikan bahasa pemrograman imperatif yang menangkap persis fungsi dasar, katakanlah dengan memperkenalkan operator untuk jumlah dan produk terbatas. Namun, pertanyaan saya adalah,
Apakah ada perubahan sintaksis pada bahasa
while
program yang membatasi fungsi-fungsi dasar dan yang dapat dinyatakan sebagai pembatasan (while
->for
) ke fungsi rekursif primitif?
Pembatasan pada for
program sebagai gantinya juga akan cukup, tentu saja, dan mungkin saya harus menjelaskan bahwa saya tidak mencari sesuatu yang benar - benar - sederhana, hanya sesuatu dengan kesederhanaan yang sebanding yang tidak memerlukan penambahan operator tambahan atau sejenisnya .
Sunting : Contoh for
bahasa representatif adalah PL- {GOTO} dari Brainerd dan Landweber "Theory of Computation" (1974), di mana setiap program memiliki jumlah variabel yang terbatas tetapi tidak terbatas, yang masing-masing dapat berisi bilangan asli, dan yang pada dasarnya terdiri dari perintah-perintah berikut:
X <- 0
(tetapkan 0 ke variabel)X <- Y
(tetapkan nilaiY
untukX
)X <- Y + 1
(menugaskan penerus nilaiY
untukX
)LOOP X; ... END;
(ulangi blok kode yang berisiX
waktu; tidak berubahX
)
Para penulis memberikan bukti bahwa ini dapat mengekspresikan persis fungsi rekursif primitif. Bahasa PL tidak cocok dengan pertanyaan dengan sempurna, karena ia menggunakan GOTO
alih-alih while
, dan PL- {GOTO} berasal dari PL dengan menghapusnya GOTO
. Namun, program PL hanya sebagai kuat sebagai while
program, dan ini GOTO
transformasi -removal sama hanya dinyatakan sebagai mengganti while
denganfor
. (Boleh dibilang mungkin bahkan sedikit lebih sederhana.)
Sunting 2 : http://en.wikipedia.org/wiki/Total_Turing_machine menyarankan hasil ini kembali ke: Meyer, AR, Ritchie, DM (1967), Kompleksitas program loop , Proc. Pertemuan Nasional ACM, 465.
LOOP
(apa yang saya sebut for
) dan GOTO
, Turing-complete, tetapi tanpa GOTO
itu hanya dapat mengekspresikan fungsi pr. Saya akan mengedit pertanyaan untuk memasukkan deskripsi singkat tentang bahasa ini.
for
loop, tetapi saya belum pernah melihat bukti. Sudahkah Anda?