跳轉到

7.1 跨越時空的對話:Lisp 如何直接將邱奇的 \(\lambda\) 演算搬進電腦?#

1956 年的達特茅斯:一個夏天改變兩個學科#

1956 年夏的達特茅斯會議(麥卡錫、明斯基、香農、羅切斯特主持)正式命名了「人工智慧」。會議的資助來自洛克菲勒基金會,議程天真而宏大(「一個夏天解決 AI」)。AI 與認知科學在此同時受洗,而約翰·麥卡錫(John McCarthy, 1927–2011)帶走的問題之一是:

如何讓機器做符號推理,而不只是數值計算?

當時的主流語言(Fortran)處理浮點數是一流的,但處理符號列表(棋局、邏輯公式、句子)束手無策。麥卡錫需要一門符號計算語言。他熟知邱奇的 \(\lambda\) 演算(普林斯頓的邏輯訓練)——1958 年,在 IBM 與 MIT 的交替工作中,Lisp(LISt Processor)誕生。

從 \(\lambda\) 演算到 S 表達式#

Lisp 對 \(\lambda\) 演算的翻譯驚人地直白:

\(\lambda\) 演算 Lisp
\(\lambda x. x+1\) (lambda (x) (+ x 1))
應用 \(f\,a\) (f a)
\(\beta\) 規約 函數調用
高階函數 函數是一等公民
遞歸(Y 組合子) 直接支援遞歸(DEFINE)

Lisp 程式本身也是嵌套列表——而列表正是 Lisp 的原生資料結構。語法、資料、語義三者同構。麥卡錫 1960 年的論文〈遞歸函數的符號表達式與它們的機器計算〉做了一件空前的事:用 Lisp 自己寫了一個 Lisp 解譯器(eval/apply 只有幾十行)——自舉(bootstrapping)從此成為語言設計的標準儀式。

歷史細節:Lisp 原本只打算用「M 表達式」(數學式寫法),「S 表達式」(括號列表)只是機器內部表示。當 S 表達式的 eval 被實現後,大家發現直接寫 S 表達式更方便——括號地獄不是設計決策,是一個意外的既成事實。今天的 Clojure 重拾了更多 M 表達式風格,歷史開了個溫柔的玩笑。

為什麼是列表?——馮·諾伊曼架構上的圖靈機血統#

Lisp 的底層是 cons cell(兩個指標的格子)構成的鏈表——這是對圖靈機紙帶的一種「離散化重述」:記憶體是一個大圖,符號結構是指標圖形。1960s 的 Lisp 機器(Symbolics)甚至造了以指標圖為一級對象的硬體——理論模型直接驅動了晶片設計。

Lisp 的兩場社會實驗#

1. AI 的母語(1958–1980s):符號 AI(專家系統、定理證明、自然語言處理)全在 Lisp 上建造。1970s–80s 的「AI 泡沫」(日本第五代電腦計畫 1982、Lisp 機器產業 Symbolics/LMI)隨專家系統商業化失敗而破裂(1987 AI winter)——AI 的第一次寒冬,也是 Lisp 機器產業的死亡。歷史在 2020s 重演的影子:算力路線(連接主義)淘汰符號路線的過程,同樣帶走了一個產業。

2. 個人運算的搖籃:Smalltalk(第 10 章)的環境哲學、Emacs(1976,內嵌 Lisp 解譯器——編輯器即平台)、以及後來的 Scheme 教學傳統(SICP,1985——MIT 的經典教材,把計算當作組合、抽象與解釋的藝術)。

Lisp 為後世貢獻的發明清單#

幾乎所有現代語言特性的第一次,都在 Lisp:

發明 年代 現代後裔
條件表達式 if-then-else 1958 一切語言
遞歸函數呼叫 1958 一切語言
動態型別 1958 Python、JS
垃圾回收 1959(下一節) Java、Go、C#
一等函數 / 高階函數 1958 JS 箭頭函數、Python 裝飾器
巨集(代碼即資料) 1963 Rust macro、Julia macro
REPL(互動式環境) 1960s Jupyter、所有現代 IDE 的即時回饋
副程式庫生態 / 包管理萌芽 1960s npm、PyPI

Paul Graham 的著名論斷(Beating the Averages, 2001):Lisp 的威力在於它是「秘密武器」——用更強的語言做事,等於用更少的人做更多的事。他的創業公司 Viaweb 用 Lisp 建 Web 商店,1998 年賣給 Yahoo——語言優勢轉化為商業優勢的著名案例,也是 2000s 新創圈重視「技術選型即競爭策略」思潮的起點。

與 ALGOL 陣營的哲學對照#

Lisp ALGOL
理論祖先 \(\lambda\) 演算(邱奇) 圖靈機的工程化 + 文法(BNF)
語法 極簡(全是括號) 精緻(begin-end、類型聲明)
型別 動態 靜態
態度 語言是可塑材料(宏、元程式) 語言是嚴格契約(規範、標準)
社群 研究者、駭客 學術委員會、產業標準組織

這兩條血統的張力(可塑性 vs 契約性)將貫穿全書:動態 vs 靜態(13.3)、腳本 vs 系統(14 章)、乃至 LLM 生成 vs 編譯器驗證(16 章)。


下一節:7.2 同像性