1/20/12 Lisp
1/13daiuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot222
Lisp之根源
保罗格雷厄姆
约翰卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如 欧几里德对几何
的贡献.
1
他向我们展示了,在只给定几个简单的操作符和一个 表示函数的记号的基础上, 如何构
造出一个完整的编程语言. 卡锡称这种语 言为Lisp, 意为List Processing, 因为他的主要思想之
一是用一种简单的数据 结构表(list)来代表代码和数据.
值得注意的是,卡锡所作的发现,不仅是计算机史上划时代的大事, 而且是一种 在我们这个时代
编程越来越趋向的模式.我认为目前为止只有两种真正干净利落, 始终如一的编程模式:C语言模式
和Lisp语言模式.此二者就象两座高地, 在它们 中间是尤如沼泽的低地.随着计算机变得越来越强
大,新开发的语言一直在坚定地 趋向于Lisp模式. 二十年来,开发新编程语言的一个流行的秘决是,
取C语言的计 算模式,逐渐地往上加Lisp模式的特性,例如运行时类型和无用单元收集.
在这篇文章中我尽可能用最简单的术语来解释约翰卡锡所做的发现. 关键是我 们不仅要学习某
个人四十年前得出的有趣理论结果, 而且展示编程语言的发展方 向. Lisp的不同寻常之处--也就是
它优质的定义--是它能够自己来编写自己. 为了理解约翰卡锡所表述的这个特点,我们将追溯他
的步伐,并将他的数学标记 转换成能够运行的Common Lisp代码.
七个原始操作符
开始我们先定义
表达式
.表达式或是一个
原子
(atom),它是一个字母序列(如 foo),或是一个由零个或
多个表达式组成的
表
(list), 表达式之间用空格分开, 放入一对括号中. 以下是一些表达式:
最后一个表达式是由四个元素组成的表, 第三个元素本身是由一个元素组成的表.
在算术中表达式 1 + 1 得出值2. 正确的Lisp表达式也有值. 如果表达式
e
得出 值
v
,我们说
e返回v
.