Loading...

LISP 的根源

Original

May 2001

(我写这篇文章是为了帮助自己理解麦卡锡到底发现了什么。你不需要了解这些东西就能用 Lisp 编程,但它应该对任何想要理解 Lisp 本质的人有所帮助——从它的起源和语义核心这两个方面来说。它拥有这样一个核心是 Lisp 的一个显著特征,也是为什么 Lisp 与其他语言不同,它有方言的原因。)

1960 年,约翰·麦卡锡 发表了一篇非凡的论文,他在编程领域做的事情就像欧几里得在几何学领域做的事情一样。他展示了如何用几个简单的运算符和一个函数表示法来构建一门完整的编程语言。 他称这种语言为 Lisp,代表“列表处理”,因为他最关键的想法之一是使用一种称为 列表 的简单数据结构来表示代码和数据。

了解麦卡锡的发现很有价值,不仅仅因为它在计算机历史上的里程碑意义,而且因为它为我们这个时代编程的发展方向提供了一个模型。在我看来,到目前为止,编程领域出现了两种真正干净、一致的模型:C 模型和 Lisp 模型。 这两种模型似乎是高地,它们之间是沼泽地。随着计算机变得越来越强大,新开发的语言一直在 稳步地 向 Lisp 模型发展。在过去 20 年中,新编程语言的流行配方是采用 C 模型的计算方式,并逐步添加从 Lisp 模型中借鉴的部分,例如运行时类型和垃圾回收。

在这篇文章中,我将尝试用最简单的术语解释麦卡锡的发现。重点不仅仅是了解四十年前某人发现的一个有趣的理论结果,而是要展示语言的发展方向。 Lisp 的不寻常之处——事实上,Lisp 的定义特征——是它可以用自身来编写。为了理解麦卡锡的含义,我们将重走他的步伐,用运行的 Common Lisp 代码来翻译他的数学符号。