Common lisp 定义了两个黑箱,一个将文本转化成lisp对象,而另一个则用这些对象来实现语言的语义。前一个箱子称为读取器,后一个称为求值器。
读取器理解:S-表达式
求职器理解:Lisp表达式语法
S-表达式:
基本元素列表(list)和原子(atom),列表由括号所包围,并可包含任何数量的由空格所分隔的元素。
数字和字符串都是自求值
另一自求值符号是关键字符号--以名字冒号开始的符号。当读取器保留这样一个名字时,他会自动定义一个以此命名的常值变量并以该符号最为其值。
合法的列表形式均以一个符号开始,但是有三种类型的列表形式,以三种方式求值:
函数调用形式(function call form)宏形式(macro form)特殊形式(special form)
宏形式的求值过程包括两个阶段:
首先,宏形式的元素不经求值即被传递到宏函数里
其次,由宏函数所返回的形式(称展开式expansion)按照正常的求值规则进行求值
真,假和等价
NIL 是唯一的假植,并且是唯一一个既是原子又是列表的对象,除了用来表假以外还用来表示空列表。NIL和空列表等价被内置在读取器之中 () <=> NIL.
Nil ,(),'nil,'()他们都互相等价。
等价EQ ,EQL. EQUAL 和EQUALP
eq是“对象标示”,只有两个对象相同才是等价,数字和字符的对象标识取决于平台,有时等价,有时不等价
eql与eq相似,同时保证相同类型的两个对象标示相同的数字或字符值时,他们是等价的。(eql 1 1) 为真,(eql 1 1.0)为假
equal 比eql宽松,将在递归中具有相同结构和内容视为等价,含有相同字符的字符串是等价的
equalp比equal还宽松,字符串判断是忽略大小写,并且只要数字表示相同数学意义上的值,它们在equalp下面就是等价的。