Bahasa whileprogram dapat mengekspresikan fungsi yang dapat dihitung secara komputasi. (Ini benar bahkan jika satu-satunya operasi aritmatika pada variabel adalah, katakanlah, kenaikan dan pengurangan.)
Jika whiledigantikan 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
whileprogram yang membatasi fungsi-fungsi dasar dan yang dapat dinyatakan sebagai pembatasan (while->for) ke fungsi rekursif primitif?
Pembatasan pada forprogram 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 forbahasa 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 nilaiYuntukX)X <- Y + 1(menugaskan penerus nilaiYuntukX)LOOP X; ... END;(ulangi blok kode yang berisiXwaktu; 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 GOTOalih-alih while, dan PL- {GOTO} berasal dari PL dengan menghapusnya GOTO. Namun, program PL hanya sebagai kuat sebagai whileprogram, dan ini GOTOtransformasi -removal sama hanya dinyatakan sebagai mengganti whiledenganfor . (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 GOTOitu hanya dapat mengekspresikan fungsi pr. Saya akan mengedit pertanyaan untuk memasukkan deskripsi singkat tentang bahasa ini.
forloop, tetapi saya belum pernah melihat bukti. Sudahkah Anda?