06/10/2026 · VietTechies · Biên tập

Vào cuối những năm 1950, bàn phím tiêu chuẩn trên dòng máy đục lỗ IBM 026 được các sinh viên Viện Công nghệ Massachusetts (MIT) sử dụng hoàn toàn thiếu các phím dấu ngoặc vuông. Vào mùa thu năm 1958, nhà khoa học máy tính John McCarthy đã giao nhiệm vụ cho nhóm sinh viên MIT hiện thực hóa thiết kế ban đầu của ông về một ngôn ngữ lập trình trí tuệ nhân tạo mới. Theo ý định ban đầu của McCarthy, lập trình viên sẽ viết mã nguồn bằng các biểu thức M (M-expression) — một dạng ký hiệu đại số cấp cao phụ thuộc vào dấu ngoặc vuông. Tuy nhiên, việc đục các ký tự thiếu này trên phần cứng máy đục lỗ đòi hỏi những thao tác xoay sở vô cùng bất tiện. Nhóm sinh viên đã quyết định loại bỏ hoàn toàn các biểu thức M để viết chương trình trực tiếp bằng biểu thức S (S-expression) nằm trong các dấu ngoặc đơn.
Từ logic Dartmouth đến danh sách đại số
Theo trang Two Bit History, ý tưởng về một ngôn ngữ xử lý danh sách được McCarthy nhen nhóm trong Dự án Nghiên cứu Hè về Trí tuệ Nhân tạo tại Dartmouth năm 1956. Tại hội thảo này, hai nhà nghiên cứu Allen Newell và Herbert Simon đã giới thiệu Ngôn ngữ Xử lý Thông tin (IPL), một công cụ được thiết kế để thao tác trên các danh sách biểu thức ký hiệu nhằm tạo ra các chứng minh logic. Dù nhận thấy danh sách ký hiệu là giải pháp lý tưởng để mô hình hóa suy luận tự động, McCarthy lại không mấy mặn mà với phong cách hợp ngữ macro của IPL. Newell và Simon tập trung vào các chỉ thị máy cấp thấp thay vì cú pháp toán học. Vì vậy, McCarthy tìm kiếm một phương án đại số thay thế, có khả năng kết hợp việc xử lý danh sách ký hiệu với tính dễ đọc ở cấp độ cao hơn của Fortran.
Chương trình đánh cờ và vi phân ký hiệu
Tầm nhìn của McCarthy tiếp tục phát triển thông qua các thử nghiệm tính toán thực tế từ năm 1956 đến năm 1958. Năm 1957, trong quá trình viết các hàm cho chương trình chơi cờ vua bằng Fortran, ông cảm thấy thất vọng trước cấu trúc điều khiển hạn chế của ngôn ngữ này và đã sáng tạo ra các biểu thức điều kiện "chính thức". Khác với câu lệnh rẽ nhánh trong Fortran, biểu thức điều kiện của McCarthy trả về một biểu thức con cụ thể dựa trên kết quả kiểm tra, đồng thời chỉ thực thi nhánh thỏa mãn điều kiện. Đến mùa hè năm 1958, khi thiết kế một hệ thống có khả năng vi phân ký hiệu, McCarthy nhận ra các biểu thức điều kiện của mình giúp đơn giản hóa đáng kể những thao tác đệ quy. Để xử lý phép vi phân trên các tổng có số lượng số hạng bất kỳ, ông giới thiệu hàm maplist nhằm áp dụng một hàm chỉ định lên từng phần tử trong danh sách. Với những ý tưởng này, vào mùa thu năm 1958, McCarthy đã giao cho các sinh viên MIT nhiệm vụ xây dựng bản cài đặt thực tế đầu tiên cho Lisp.
Giới hạn của máy đục lỗ và biểu thức S
McCarthy vốn dự định để các biểu thức S — tức các biểu thức ký hiệu được bao bọc bởi dấu ngoặc đơn — chỉ đóng vai trò như một dạng biểu diễn nội bộ dành riêng cho máy tính. Mã nguồn dành cho lập trình viên dự kiến sẽ sử dụng các biểu thức M nằm trong dấu ngoặc vuông. Tuy nhiên, giới hạn phần cứng của máy đục lỗ IBM 026 đã vĩnh viễn thay đổi thiết kế cú pháp đó. Do thiếu các phím ngoặc vuông, nhóm phát triển quyết định biểu diễn cả danh sách dữ liệu lẫn việc gọi hàm trực tiếp bằng các biểu thức S trong dấu ngoặc đơn. Sự thỏa hiệp cú pháp cấp thấp mang tính tạm thời ban đầu đã trở thành đặc trưng cốt lõi của Lisp: ký hiệu tiền tố, cấu trúc cây đồng nhất đóng khung trong dấu ngoặc đơn, cùng sự nhất thể hóa giữa mã nguồn và dữ liệu.
Chính thức hóa lý thuyết tính toán năm 1960
Năm 1960, McCarthy công bố bài báo khoa học nổi tiếng "Recursive Functions of Symbolic Expressions and Their Computation by Machine" (Các hàm đệ quy của biểu thức ký hiệu và việc tính toán bằng máy tính). Trong quá trình cùng sinh viên tinh giản ngôn ngữ khi cài đặt, McCarthy nhận ra Lisp đã phát triển từ một công cụ phần mềm thực tiễn thành một hệ thống toán học cô đọng. Bằng cách định nghĩa Lisp thông qua một tập hợp nhỏ các quy tắc nguyên thủy và hàm đệ quy, McCarthy đã đưa ra một hệ tiên đề để nghiên cứu lý thuyết tính toán, tỏ ra gọn gàng hơn hẳn so với máy Turing hay lý thuyết hàm đệ quy truyền thống.
Cú pháp tối giản cùng nền tảng tiên đề vững chắc đã giúp Lisp trở thành ngôn ngữ cấp cao lâu đời thứ hai vẫn còn được sử dụng tích cực ngày nay, chỉ sau Fortran. Những sự thỏa hiệp bắt buộc do giới hạn phần cứng máy đục lỗ ở thập niên 1950 rốt cuộc lại tạo nên một cấu trúc thống nhất và tối giản, biến Lisp thành hình mẫu nền tảng trong lịch sử thiết kế ngôn ngữ lập trình.
Ảnh minh họa do AI tạo, không phải ảnh tư liệu.
Nguồn: 0b10
0b10
How Lisp Became God's Own Programming Language
