LISP的根源
Original2001年5月
(我写这篇文章是为了帮助自己理解麦卡锡发现的内容。你不需要了解这些内容就能用Lisp编程,但这对任何想要理解Lisp本质的人都应该是有帮助的——无论是从其起源还是语义核心的角度来看。它有这样一个核心是Lisp的一个显著特征,也是Lisp与其他语言不同的原因。)
在1960年,约翰·麦卡锡发表了一篇了不起的论文,他在编程方面做的事情类似于欧几里得在几何学方面所做的。他展示了如何在给定少量简单运算符和函数符号的情况下,构建一个完整的编程语言。他将这种语言称为Lisp,意为“列表处理”,因为他一个关键的想法是使用一种简单的数据结构,称为列表,来表示代码和数据。
理解麦卡锡的发现是值得的,不仅因为它是计算机历史上的一个里程碑,还因为它是我们这个时代编程发展趋势的一个模型。在我看来,到目前为止,编程有两个非常干净、一致的模型:C模型和Lisp模型。这两者似乎是高地的两个点,中间是沼泽低地。随着计算机变得越来越强大,正在开发的新语言一直在稳步向Lisp模型靠拢。在过去20年中,新编程语言的一个流行配方是采用C模型的计算方式,并逐步添加来自Lisp模型的部分内容,比如运行时类型和垃圾回收。
在这篇文章中,我将尽可能简单地解释麦卡锡的发现。重点不仅是了解四十年前某人发现的有趣理论结果,而是展示语言的发展方向。Lisp的一个不寻常之处——实际上,Lisp的定义特征——是它可以用自身来编写。为了理解麦卡锡的这一点,我们将回顾他的步骤,将他的数学符号翻译成可运行的Common Lisp代码。