Lisp 中的列表 — 任何列表 — 都是一个可直接运行的程序。 如果你运行它(Lisp 术语称为求值(evaluate)), 计算机会做三件事之一:直接返回列表本身;给出错误信息; 或将列表中的第一个符号当作执行命令。 (当然,通常你真正想要的是第三种结果。)
前面示例中某些列表前的单引号 ' 称为引用(quote);
当它出现在列表前时,告诉 Lisp 直接原样保留该列表,不做任何处理。
但如果列表前没有引用标记,列表的第一个元素就具有特殊含义:
它是计算机要执行的命令。
(在 Lisp 中,这类命令称为函数。)
前面出现的列表 (+ 2 2) 没有前置引用,
因此 Lisp 将 + 理解为对后续数字执行加法操作的指令。
如果你正在 GNU Emacs 的 Info 中阅读本文,可以按如下方式对列表求值: 将光标放在下面列表的右括号紧右侧,然后输入 C-x C-e:
(+ 2 2)
你会在回显区看到数字 4 出现2。
(你刚刚执行的操作就是对列表求值。回显区是屏幕底部用于显示或回显文本的行。)
现在对带引用的列表做同样操作:
将光标放在下面列表末尾,输入 C-x C-e:
'(this is a quoted list)
你会在回显区看到 (this is a quoted list)。
两种操作中,你实际都是在向 GNU Emacs 内部名为Lisp 解释器的程序发送命令 — 让解释器对表达式求值。 Lisp 解释器的名称源自人类对表达式含义进行理解与阐释的行为。
你也可以对不属于任何列表、没有被括号包裹的原子求值; Lisp 解释器同样会将人类可读的表达式转换为计算机可执行的指令。 但在讨论这一点之前(see 变量), 我们先介绍当你出现错误时 Lisp 解释器会如何处理。