level 13
基本操作符1 quote (quote x) 返回 x,我们简记为 'x (quote a) 上面的表达式的值是a。如果使用c/Java语言的表达方式,可以说成:上面这段代码返回的值是a。 'a 这个表达式和上面的那个相同,值也是a。将quote写成 ' 只是一种语法糖。
2012年09月12日 00点09分
1
level 13
基本操作符2 atom (atom x) 当 x 是一个原子或者空表时返回原子 t,否则返回空表 ()。在 Common Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。 > (atom 'a) t > (atom '(a b c)) () > (atom '()) t 现在我们有了第一个需要求出自变量值的操作符,让我们来看看 quote 操作符的作用——通过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom 将其视为代码,例如: > (atom (atom 'a)) t 这是因为(atom 'a)的结果(t)被求出,并代入(atom (atom 'a)),成为(atom t),而这个表达式的结果是t。 反之一个被引用的表仅仅被视为表 > (atom '(atom 'a)) () 引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 Lisp 最为与众不同的特点:代码和数据使用相同的结构来表示,用 quote 来区分它们。
2012年09月12日 00点09分
2
level 13
基本操作符3 eq (eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 () > (eq 'a 'a) t > (eq 'a 'b) () > (eq '() '()) t
2012年09月12日 00点09分
3
level 13
基本操作符4 car (car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如: > (car '(a b)) a
2012年09月12日 00点09分
4
level 13
基本操作符5 cdr (cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如: > (cdr '(a b c)) (b c)
2012年09月12日 00点09分
5
level 13
基本操作符6 cons (cons x y) 返回一个cons cell (x y),例如: > (cons 'a 'b) (a . b) 一个cons cell的第二项如果是另一个cons cell,就表示成表的形式,例如:(a . (b . c)) 就表示成(a b . c) 若一个cons cell第二项为空,就省略不写,例如:(a . (b . ())) 表示为(a b) 这样,多重的cons cell就构成了表: > (cons 'a (cons 'b (cons 'c ()))) (a b c)
2012年09月12日 00点09分
6
level 13
基本操作符7 cond (cond (p1 e1) ...(pn en)) 的求值规则如下. 对“条件表达式p”依次求值直到有一个返回t. 如果能找到这样的p表达式,相应的“结果表达式e”的值作为整个cond表达式的返回值. > (cond ((eq 'a 'b) 'first) ((atom 'a) 'second)) second
2012年09月12日 00点09分
7
level 9
小和尚:师傅,我不小心把您给我的LISP经书搞坏了两页?
老和尚:什么?你怎么能这么不小心呢?是哪两页?
小和尚:最后两页
老和尚:唉,吓我一跳……最后两页都是括号,回头我补上就是了,没事
2012年09月12日 02点09分
10