1.2 运行程序

在Lisp中,任何列表本身都可以作为一个准备执行的程序。如果对列表进行求值(在Lisp术语中称为评估(evaluate, eval)),计算机会执行以下三种操作之一:直接返回列表本身且不做任何处理;显示错误信息;或者将列表中的第一个符号视为命令并执行相应操作。 (当然,通常您期望的是最后一种情况!)

在前面章节的示例中,我在某些列表之前使用的',称为单引号;它的作用是告诉Lisp直接原样输出这个列表,不做任何处理。但是,如果列表前没有单引号,那么列表中的第一个元素就具有特殊意义:它是计算机要执行的命令。 (在Lisp中,这些命令被称为函数。)上例中的(+ 2 2)列表没有单引号,因此Lisp会将+视为指示对后面的数字进行相加运算的命令。

如果您在GNU Emacs中的Info模式下阅读此文档,可以通过以下步骤来执行Lisp表达式的计算:将光标置于以下列表的右括号之后,键入C-x C-e

(+ 2 2)

您将在回显区域看到数字42。 (您刚刚对该列表进行了评估。回显区域位于屏幕底部区域,或是输出文本信息。)现在尝试对一个带引号的列表执行相同的操作:将光标放在下例列表的右括号后,键入C-x C-e

'(this is a quoted list)

您将在回显区域看到 (this is a quoted list)

在上述两种情况下,您所做的是向GNU Emacs内部的一个叫做Lisp解释器的程序发送一个命令,即给解释器一个要评估的表达式。Lisp解释器(interpreter)得名于它解释表达式含义的功能,就像一个人在解释一样。

您也可以评估一个不是列表的原子,即一个没有被括号包围的原子;同样,Lisp解释器会将这种人类可读的表达式翻译成计算机语言。但在讨论这个之前(see 变量),我们先来看当出现错误时Lisp解释器会做什么。


Footnotes

(2)

Emacs以十进制、八进制和十六进制以及字符的方式显示整数值,但现在让我们忽略这个便利功能。