lisp自求值

1. Common Lisp语言处理器分两部分——Reader和Evaluator

Reader:字符串转化为S-表达式
Evaluator:S-表达式转化为Lisp形式

S-表达式:列表和原子
原子:
1)number
2)string literal
以上自求值
3)symbol:求值为所代表的对象,T和NIL自求值,:开头的关键字符号自求值
*var*:全局变量
+var+:常量

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下面就是等价的。

猜你喜欢

转载自blog.csdn.net/pilifeng1/article/details/82012697
今日推荐