我正在尝试解决教程的练习5.5
编写一个带有可选参数的交互式函数,测试其参数(数字)是否大于或等于或小于
的值,并在消息中告诉您哪个。但是,如果您不向函数传递参数,请使用 56 作为默认值。fill-column
为此,我写了这个。
(defun foo (&optional x)
(interactive "P")
(if (not x) (setq x 59))
(message (cond ((>= x fill-column) "bigger or equal")
((< x fill-column) "smaller"))))
当没有传递任何参数时(
C-u M-x foo
),它会抛出错误
错误的类型参数:数字或标记-p。 (4).
我从实验、推理和调试器中得到的信息是,该函数在第三行失败。显然,
not
和一个可选但未使用的参数并不同意。我已经检查了not
的文档,但没有帮助。这给了我我的问题:为什么否定未使用的参数会引发错误?
我还没有完全掌握 Emacs 中的调试器,所以很抱歉我无法自己解决这个问题。我对 Emacs 和 Emacs Lisp 都是初学者。我不是一个新的程序员,甚至不是一个新的 Lisper。我已经知道计划了。请教我如何钓鱼。