Lisp
是一门历史悠久的语言,全名叫
LISt
Processor
,也就是“表处理语言”
,它是由
John
McCarthy
于
1958
年就开始设计的一门语言。
和
Lisp
同时期甚至更晚出现的许多语言如
Algo
等如今大多已经消亡,
又或者仅仅在一些特定的场合有一些微不足道的用途,
到现在还广为
人知的恐怕只剩下了
Fortran
和
COBOL
。但唯独
Lisp
,不但没有随着时间而衰退,反倒是
一次又一次的焕发出了青春,从
Lisp
分支出来的
Scheme
、
ML
等语言在很多场合的火爆程
度甚至超过了许多老牌明星。那么这颗常青树永葆青春的奥秘究竟在哪里呢?
如果你只接触过
C/C++
、
Pascal
这些“过程式语言”的话,
Lisp
可能会让你觉得十分不同寻
常,首先吸引你眼球(或者说让你觉得混乱的)一定是
Lisp
程序中异常多的括号,当然从
现在的角度来讲,
这种设计的确对程序员不大友好,
不过考虑到五六十年代的计算机处理能
力,简化语言本身的设计在那时算得上是当务之急了。
Lisp
的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议,别怕,我
听你们的)
,它只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式
同时也就是程序结构,
但是正如规则最简单的围棋却有着最为复杂的变化一样,
Lisp
使用最
基本的语言结构定义却可以完成其它语言难于实现的、最复杂的功能。
废话少说,现在我们就来看看
Lisp
语言中的基本元素。
Lisp
的表达式是一个原子
(atom)
或表
(list)
,原子
(atom)
是一个字母序列,如
abc
;表是由零个
或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:
abc
()
(abc
xyz)
(a
b
(c)
d)
最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。
正如算数表达式
1+1
有值
2
一样,
Lisp
中的表达式也有值,如果表达式
e
得出值
v
,我们说
e
返回
v
。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元
素叫做自变量。
正如欧几里德的几何世界中有五个公理一样,我们在这里给出
Lisp
世界中的
7
个公理(基
本操作符)
:
(quote
x)
返回
x
,我们简记为
'x
(atom
x)
当
x
是一个原子或者空表时返回原子
t
,
否则返回空表
()
。
在
Lisp
中我们习惯用原子
t
表示真,而用空表
()
表示假。
>
(atom
'a)
t
>
(atom
'(a
b
c))
()
>
(atom
'())