有两个通常在别的语言所找不到的 Lisp 数据类型是符号(symbol)与列表(lists),符号是英语的单词 (words)。无论你怎么输入,通常会被转换为大写:
符号(通常)不对自身求值,所以要是想引用符号,应该像上例那样用 '
引用它。
注意引号保护了整个表达式(包含内部的子表达式)被求值。
你可以调用 list
来创建列表。由于 是函数,所以它的实参会被求值。这里我们看一个在函数 list
调用里面,调用 +
函数的例子:
不过得到第 10 章,我们才来考虑这种程序,但现在了解到列表和表达式的关系是非常重要的,而不是被它们搞混。这也就是为什么我们需要 quote
。如果一个列表被引用了,则求值规则对列表自身来求值;如果没有被引用,则列表被视为是代码,依求值规则对列表求值后,返回它的值。
这里第一个实参被引用了,所以产生一个列表。第二个实参没有被引用,视为函数调用,经求值后得到一个数字。
你不需要引用 nil
(但引用也无妨),因为 nil
是对自身求值的。