LISP 语言诞生
麦卡锡为符号计算设计的编程语言
John McCarthy 提出 LISP,一种以符号表达式和递归为核心的编程语言。它成为之后几十年 AI 研究的主流工具,也为「程序即数据」的思想打下基础。
1956 年的达特茅斯会议之后,约翰·麦卡锡有了一个和当时主流完全不同的想法。别人忙着让程序下棋、证明定理,麦卡锡想的却是:能不能造一个「建议接受者」系统——它不预先背好所有答案,而是把关于世界的常识写成一个可检索的知识库,程序在遇到新问题时自己推理。他 1958 年的论文《Programs with Common Sense》把这个想法正式发表,但卡在了工具上:当时的 FORTRAN 只会算数,表达不了这种「程序应该能思考程序自己」的东西。
于是麦卡锡开始设计一种新语言。1958 年,LISP 的雏形出现;1960 年,他发表《Recursive Functions of Symbolic Expressions and Their Computation by Machine》,把语言的核心讲清楚了。LISP 的基本单位是列表——括号里套括号的符号表达式。函数接收列表,返回列表;而程序本身,也不过是列表。这个设计让「代码即数据」第一次成为工程现实:程序可以把自己的源码当作普通数据来操作、改写、再生成。
LISP 的另一个特点是递归。求解一个复杂问题,就把它拆成更小的同类问题,直到拆到可以直接回答的底。这种思考方式对后来的函数式语言影响深远。今天程序员熟悉的词法作用域、垃圾回收、递归闭包,都能在 1960 年这篇论文和它的后继版本里找到祖先。很多当时看起来奇怪的设计——括号多到让人头晕、一切皆表达式——后来都被证明是表达力的一部分,而不是缺陷。
在 1960 到 1980 年代,LISP 几乎就是 AI 研究者的母语。MIT 的 MAC 项目、斯坦福的 SAIL、以及后来的专家系统开发,大多建立在 LISP 及其方言之上。专家系统时代那些著名的商用工具——比如基于 LISP 的规则系统——撑起了 AI 第一波产业化的门面。机器换了一代又一代,LISP 的机器从专用 LISP 机做到通用工作站,语言本身却一直活到深度学习的时代。
「程序即数据」这个遗产,比语言本身活得更久。元编程、代码生成、程序自动修改——这些今天在 Agent 时代被反复提起的能力,在 LISP 的哲学里早有端倪。当 2020 年代的模型开始生成、执行、修补代码时,它们处理的「代码作为数据」的抽象,在 1960 年就已经被麦卡锡用括号和列表固定下来了。
麦卡锡没有发明今天所有编程语言的语法,但他发明了一种看待程序的方式。LISP 没能在商业上统治世界,可它塑造了 AI 研究者的思维方式:把推理、知识、程序本身都当作可操作的数据。符号主义 AI 后来的兴衰有它自己的轨迹,但支撑那段历史最久的工具,是 1958 年这个为了一个「建议接受者」的梦想而诞生的括号语言。
After the 1956 Dartmouth workshop, John McCarthy held an idea out of step with the mainstream. Others were making programs play checkers or prove theorems; McCarthy imagined an "advice-taker"—a system that does not preload every answer but keeps common sense in a searchable knowledge base and reasons on its own when a new problem appears. His 1958 paper "Programs with Common Sense" stated the idea, but stalled on tools: FORTRAN could only crunch numbers, not express a program that could think about programs.
So McCarthy began designing a new language. A prototype emerged in 1958; in 1960 he published "Recursive Functions of Symbolic Expressions and Their Computation by Machine," laying out the language's core. LISP's basic unit is the list—symbolic expressions nested in parentheses. Functions take lists and return lists; and a program, itself, is just a list. That made "code as data" an engineering reality for the first time: a program could treat its own source as ordinary data, modify it, and generate new programs.
The other hallmark was recursion—solve a hard problem by splitting it into smaller versions of itself until reaching a directly answerable base. That way of thinking shaped later functional languages. The features programmers now take for granted—lexical scoping, garbage collection, recursive closures—trace back to that 1960 paper and its successors. Oddities that looked like flaws at the time (brackets everywhere, everything is an expression) proved to be expressive power, not defects.
From the 1960s through the 1980s, LISP was effectively the mother tongue of AI research. MIT's MAC project, Stanford's SAIL, and much of the expert-systems development ran on LISP and its dialects. Commercial tools of the expert-systems boom—rule systems built on LISP—propped up AI's first industrial wave. Machines came and went, from dedicated LISP machines to general workstations, but the language outlived them, surviving into the deep-learning era.
The "programs as data" inheritance outlived the language itself. Metaprogramming, code generation, programs that modify programs—abilities revived in today's agent era—were already latent in LISP's philosophy. When 2020s models generate, execute, and patch code, the abstraction of "code as data" they manipulate was fixed in 1960 by McCarthy's parentheses and lists.
McCarthy did not invent every syntax modern programmers use, but he invented a way of seeing programs. LISP never conquered the commercial world; what it shaped was how AI researchers thought—treating reasoning, knowledge, and programs themselves as manipulable data. The rise and fall of symbolic AI has its own trajectory, but the tool that supported that history longest was a bracket language born in 1958 for the dream of an advice-taker.
展开完整事件档案人物、主题、模型与产品
- 人物
- John Mccarthy
- 模型
- —
- 产品
- —