Ngôn ngữ của while
các chương trình có thể diễn tả các chức năng có thể tính toán được. (Điều này đúng ngay cả khi các phép toán số học duy nhất trên các biến là, giả sử, tăng và giảm.)
Nếu while
được thay thế bằng for
, làm cho các vòng lặp luôn bị giới hạn, thì ngôn ngữ chỉ có thể biểu thị các hàm đệ quy nguyên thủy.
Gần đây tôi đã nhận thức được lớp các hàm cơ bản , nằm dưới các hàm đệ quy nguyên thủy, nhưng vẫn nằm trên hệ thống phân cấp theo cấp số nhân.
Rõ ràng là có thể định nghĩa một ngôn ngữ lập trình mệnh lệnh nắm bắt chính xác các hàm cơ bản, bằng cách giới thiệu các toán tử cho tổng và sản phẩm bị ràng buộc. Tuy nhiên, câu hỏi của tôi là,
Có sự thay đổi cú pháp đối với ngôn ngữ của
while
các chương trình giới hạn nó với các chức năng cơ bản và có thể được nói đơn giản là hạn chế (while
->for
) đối với các hàm đệ quy nguyên thủy không?
for
Dĩ nhiên, một hạn chế đối với các chương trình cũng đủ, và có lẽ tôi nên làm rõ rằng tôi không tìm kiếm thứ gì đó hoàn toàn như đã nêu, chỉ là thứ gì đó đơn giản tương đương mà không cần thêm toán tử bổ sung hoặc tương tự .
Chỉnh sửa : Một ví dụ về for
ngôn ngữ đại diện là PL- {GOTO} từ "Lý thuyết tính toán" của Brainerd và Landwebeller (1974), trong đó mỗi chương trình có số lượng biến hữu hạn nhưng không giới hạn, mỗi biến có thể chứa một số tự nhiên và trong đó bao gồm chủ yếu các lệnh sau:
X <- 0
(gán 0 cho một biến)X <- Y
(gán giá trị củaY
đểX
)X <- Y + 1
(gán sự kế thừa giá trịY
đếnX
)LOOP X; ... END;
(lặp lại khối chứaX
thời gian mã ; không thay đổiX
)
Các tác giả đưa ra một bằng chứng rằng điều này có thể diễn tả chính xác các hàm đệ quy nguyên thủy. Ngôn ngữ PL không khớp hoàn hảo với câu hỏi, vì nó sử dụng GOTO
thay vì while
và PL- {GOTO} có nguồn gốc từ PL bằng cách xóa GOTO
khỏi câu hỏi. Tuy nhiên, các chương trình PL cũng mạnh mẽ như while
các chương trình và sự GOTO
chuyển đổi -removal này chỉ đơn giản là được nêu như thay thế while
bằng for
. (Có thể cho rằng có lẽ đơn giản hơn một chút.)
Chỉnh sửa 2 : http://en.wikipedia.org/wiki/Total_Turing_machine gợi ý kết quả này quay trở lại: Meyer, AR, Ritchie, DM (1967), Sự phức tạp của các chương trình vòng lặp , Proc. của các cuộc họp quốc gia ACM, 465.
LOOP
(cái mà tôi đã gọi for
) và GOTO
, là Turing-Complete, nhưng không GOTO
có ngôn ngữ này chỉ có thể diễn tả các chức năng pr. Tôi sẽ chỉnh sửa câu hỏi để bao gồm một mô tả ngắn gọn về ngôn ngữ này.
for
các vòng lặp, nhưng tôi chưa bao giờ thấy một bằng chứng nào. Có bạn không