在 Lisp 里, 是函数,然而如 (+ 2 3)
的表达式,是函数调用。
当 Lisp 对函数调用求值时,它做下列两个步骤:
如果实参本身是函数调用的话,上述规则同样适用。以下是当 (/ (- 7 1) (- 4 2))
表达式被求值时的情形:
- Lisp 对
(- 7 1)
求值:7
求值为7
, 求值为1
,它们被传给函数-
,返回6
。- 数值
6
与 被传入函数/
,返回3
。
Note
逃离麻烦
如果你试着输入 Lisp 不能理解的东西,它会打印一个错误讯息,接着带你到一种叫做中断循环(break loop)的顶层。 中断循环给予有经验的程序员一个机会,来找出错误的原因,不过最初你只会想知道如何从中断循环中跳出。 如何返回顶层取决于你所使用的 Common Lisp 实现。在这个假定的实现环境中,输入 :abort
跳出:
一个不遵守 Common Lisp 求值规则的操作符是 quote
。 quote
是一个特殊的操作符,意味着它自己有一套特别的求值规则。这个规则就是:什么也不做。 quote
操作符接受一个实参,并完封不动地返回它。
为了方便起见,Common Lisp 定义 '
作为 quote
的缩写。你可以在任何的表达式前,贴上一个 '
,与调用 quote
是同样的效果:
使用缩写 '
比使用整个 表达式更常见。