如果你尝试评估一个没有绑定值的符号,你将收到一个错误消息。你可以通过尝试我们的2加2的加法来看到这一点。在下面的表达式中,将光标放在第一个数字2之前的+
右边,然后输入C-x C-e:
(+ 2 2)
在GNU Emacs 22中,你将创建一个名为*Backtrace*的缓冲区,显示如下错误消息:
---------- Buffer: *Backtrace* ---------- Debugger entered--Lisp error: (void-variable +) eval(+) elisp--eval-last-sexp(nil) eval-last-sexp(nil) funcall-interactively(eval-last-sexp nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) ---------- Buffer: *Backtrace* ----------
(同样,你可以在*Backtrace*缓冲区中输入q来退出调试器。)
这个回溯与我们最初看到的第一个错误消息不同,它说的是‘Debugger entered--Lisp error: (void-function this)’。在这种情况下,该函数没有作为变量的值;而在其他错误消息中,函数(单词‘this’)没有定义。
在这个对+
的实验中,我们的做法是导致Lisp解释器评估+
并寻找变量的值,而不是函数的定义。我们通过将光标放在符号右边而不是在封闭列表的括号后面,使Lisp解释器执行了前一个S表达式,这种情况下是单独的+
。
由于+
没有绑定到任何值,只有函数定义,错误消息报告该符号作为变量的值为空。