Ngôn ngữ của whilecá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
whilecá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?
forDĩ 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ề forngô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ứaXthờ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 GOTOthay vì whilevà PL- {GOTO} có nguồn gốc từ PL bằng cách xóa GOTOkhỏi câu hỏi. Tuy nhiên, các chương trình PL cũng mạnh mẽ như whilecác chương trình và sự GOTOchuyển đổi -removal này chỉ đơn giản là được nêu như thay thế whilebằ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 GOTOcó 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.
forcá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