10.2 引用(Quoting)(DONE)

特殊表达式 quote 单纯返回其参数,不做求值和任何改变。这提供了一种构造常数变量和列表的方法。(没有必要在诸如 数字, 字符串,向量 这样的自求值对象前添加 quote)

Special Form: quote object

这个特殊表达式单纯返回 object,而不去做任何求值。返回的值可能会出于某种目的转换为不可变的共享结构。详情查阅自求值表达式。

因为在代码中, quote 太常用了,Lisp 专门提供了一个方便的写法。单个 单引号 ("'")后紧跟对象,这样的结构会展开为一个列表,其中第一个元素为 quote,而第二个元素为 该对象。因此,'x 是 (quote x) 的一种一缩写。

这里有一些使用qoute的例子:

(quote (+ 1 2))
     ⇒ (+ 1 2)
(quote foo)
     ⇒ foo
'foo
     ⇒ foo
''foo
     ⇒ 'foo
'(quote foo)
     ⇒ 'foo
['foo]
     ⇒ ['foo]

需要注意的是,表达式 (list '+ 1 2) 和 '(+ 1 2) 看起来生成的列表和 (+ 1 2) 是 equal 的,但前者生成的是可变列表,而后者生成的是不可变的列表,通常会被转换成共享结构。详情查阅自求值表达式。

另一个引用结构为 function(查阅 匿名函数),这个结构用于引用即将被编译的 Lisp lambda表达式。还有一个引用结构为 "`"(查阅 反引用),这个结构用于引用 列表中部分结构,没有被引用的部分依旧会被求值并替换。

最后更新于