Tôi đang làm việc với ngôn ngữ lập trình nhỏ của riêng mình cho mục đích giáo dục và tôi gặp phải một chút vấn đề. Có một vài giải pháp khác nhau cho nó, nhưng tất cả chúng đều có vẻ không phù hợp - và từ những gì tôi hiểu, không cần thiết. Nhưng đọc qua những cuốn sách tôi có và tìm kiếm trên google, tôi không thể tìm thấy giải pháp tao nhã.
Vì vậy, vấn đề là tôi đang xây dựng tính toán lambda cơ bản khi tôi hiểu nó. Tôi đã định nghĩa đúng / sai là các thuật ngữ trừu tượng. Tôi có thể kết hợp những thứ này với các hàm để thực hiện loại hành vi if / then / other. Vấn đề đi kèm với các vòng lặp. Tôi có thể định nghĩa một vòng lặp while cơ bản thông qua đệ quy, nhưng trong thực tế, điều đó gây ra tràn ngăn xếp. Theo tôi hiểu, giải pháp thông thường sẽ là thực hiện Tối ưu hóa cuộc gọi Đuôi, nhưng tôi không thấy cách tôi có thể - các điều kiện được xác định bằng ngôn ngữ. Do đó, trình biên dịch không biết rằng phần thân của vòng lặp while nằm ở vị trí đuôi.
Cuốn sách rồng tập trung vào việc thực hiện vòng lặp giả định có nhãn và gotos. Tôi chắc chắn có thể làm điều đó. Dường như các ngôn ngữ khác không xây dựng trong các cấu trúc lặp ít nhất là xây dựng trong các điều kiện và sau đó thực hiện TCO. Và tôi chắc chắn cũng có thể làm điều đó. Nhưng sự hiểu biết của tôi là miễn là tôi có thể áp dụng trừu tượng và thực hiện giảm, thì các vòng lặp (và mọi thứ khác) sẽ có thể được xây dựng từ các khối cơ bản đó.
Vậy tôi còn thiếu gì? Hoặc đây có phải là một trong những trường hợp "bạn có thể mô hình hóa mọi thứ một khi bạn có X và Y" không giống như "bạn có thể mô hình hóa mọi thứ một khi bạn có X và Y trên máy tính thật" và tích hợp là cần thiết cho thực tế mục đích?