Bạn đã có một số câu trả lời tốt cho đến nay; hãy để tôi đưa cho bạn một ví dụ không thực tế nhưng mang tính giáo dục cao về cách bạn có thể thiết kế một ngôn ngữ mà không cần khái niệm về ngăn xếp hay "dòng điều khiển". Đây là một chương trình xác định giai thừa:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = f(3)
Chúng tôi đặt chương trình này trong một chuỗi và chúng tôi đánh giá chương trình bằng cách thay thế văn bản. Vì vậy, khi chúng tôi đang đánh giá f(3)
, chúng tôi thực hiện tìm kiếm và thay thế bằng 3 cho i, như thế này:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = if 3 == 0 then 1 else 3 * f(3 - 1)
Tuyệt quá. Bây giờ chúng tôi thực hiện một thay thế văn bản khác: chúng tôi thấy rằng điều kiện của "nếu" là sai và thực hiện thay thế một chuỗi khác, tạo ra chương trình:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = 3 * f(3 - 1)
Bây giờ chúng tôi thực hiện một chuỗi thay thế khác trên tất cả các biểu thức con liên quan đến các hằng số:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = 3 * f(2)
Và bạn thấy điều này diễn ra như thế nào; Tôi sẽ không chuyển dạ. Chúng tôi có thể tiếp tục thực hiện một loạt các thay thế chuỗi cho đến khi chúng tôi xuống let x = 6
và chúng tôi đã hoàn thành.
Chúng tôi sử dụng ngăn xếp theo truyền thống cho các biến cục bộ và thông tin tiếp tục; hãy nhớ rằng, một ngăn xếp không cho bạn biết bạn đến từ đâu, nó cho bạn biết bạn sẽ đi đâu tiếp theo với giá trị trả về đó.
Trong mô hình thay thế chuỗi của lập trình, không có "biến cục bộ" trên ngăn xếp; các tham số chính thức được thay thế cho các giá trị của chúng khi hàm được áp dụng cho đối số của nó, thay vì đưa vào bảng tra cứu trên ngăn xếp. Và không có "đi đâu đó tiếp theo" bởi vì đánh giá chương trình chỉ đơn giản là áp dụng các quy tắc đơn giản để thay thế chuỗi để tạo ra một chương trình khác nhưng tương đương.
Bây giờ, tất nhiên, thực sự thay thế chuỗi có lẽ không phải là cách để đi. Nhưng các ngôn ngữ lập trình hỗ trợ "lý luận tương đương" (như Haskell) đang sử dụng hợp lý kỹ thuật này.