提问人:J. Mini 提问时间:9/28/2023 更新时间:9/28/2023 访问量:30
为什么在逻辑上否定未使用的可选参数会抛出错误?
Why does logically negating an unused optional argument throw an error?
问:
我正在尝试解决本教程的练习 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
错误的类型参数:number-or-marker-p。(4).
我从实验、推理和调试器中收集到的信息是,此函数在其第三行失败。显然,一个可选但未使用的参数并不一致。我已经检查了文档,但没有帮助。这给了我一个问题:为什么否定一个未使用的参数会抛出错误?not
not
我还没有完全掌握 Emacs 中的调试器,所以很抱歉我自己无法解决这个问题。我是 Emacs 和 Emacs Lisp 的初学者。我不是一个新的程序员,甚至不是一个新的Lisper。我已经知道方案了。随意教我如何钓鱼。
答:
1赞
J. Mini
9/28/2023
#1
(4)
指的是导致错误的原因。这是包含四个的列表。回想一下本教程所说的内容。C-u
如果不键入数字,则默认为带有 4 的 cons 单元格
C-u
想必,的错误就是指这个。not
评论
0赞
phils
9/28/2023
事实上,错误将是由于需要一个数字参数。使用列表参数没有问题,因为只关心参数是否为 .(>= x fill-column)
not
not
nil
0赞
phils
9/28/2023
有关前缀参数的更多信息,请参阅,并结合此,仔细注意 和 之间的区别C-h i g (elisp)Prefix Command Arguments
C-h f interactive
(interactive "P")
(interactive "p")
0赞
J. Mini
9/29/2023
@phils啊。显然,我需要学习更多关于在 Emacs 中调试的信息。
评论
(4)
不是,所以返回,因此形式计算形式(作为其“else”子句),该子句很快计算它需要是一个数字。nil
(not x)
nil
if
message
(>= x fill-column)
x
C-u
interactive