特殊形式 quote 会原样返回它唯一的参数,不对其进行求值。这提供了一种在程序中使用常量符号和列表的方式(符号与列表本身并非自求值对象)。(数字、字符串、向量这类自求值对象不需要加 quote。)
由于 quote 在程序中使用频率极高,Lisp 为此提供了一种便捷的读取语法。一个撇号字符(‘'’)后跟一个 Lisp 对象(采用读取语法格式),会展开为一个列表:该列表的第一个元素是 quote,第二个元素则是这个对象。因此,读取语法 'x 是 (quote x) 的简写形式。
以下是一些使用 quote 的表达式示例:
(quote (+ 1 2))
⇒ (+ 1 2)
(quote foo)
⇒ foo
'foo
⇒ foo
''foo
⇒ 'foo
'(quote foo)
⇒ 'foo
['foo]
⇒ ['foo]
尽管表达式 (list '+ 1 2) 和 '(+ 1 2) 都会生成与 (+ 1 2) 相等的列表,但前者生成的是全新创建的可变列表,而后者生成的列表由可能被共享的 cons 单元构成,不应被修改。
See 自求值形式。
其他引用类构造包括 function(see 匿名函数)—— 它会对以 Lisp 编写的匿名 lambda 表达式进行编译;以及 ‘`’(see 反引号)—— 该符号用于仅引用列表的部分内容,同时计算并替换列表的其他部分。