为什么逻辑上否定未使用的可选参数会抛出错误?

问题描述 投票:0回答:1

我正在尝试解决教程的练习5.5

编写一个带有可选参数的交互式函数,测试其参数(数字)是否大于或等于或小于

fill-column
的值,并在消息中告诉您哪个。但是,如果您不向函数传递参数,请使用 56 作为默认值。

为此,我写了这个。

(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。我已经知道计划了。请教我如何钓鱼。

elisp optional-parameters negation
1个回答
0
投票

(4)
指的是导致错误的原因。这是包含四个的列表。回想一下教程所说的关于
C-u
的内容。

如果您不输入数字,

C-u
默认为带有 4

的 cons 单元格

想必,

not
的错误指的是这个。

© www.soinside.com 2019 - 2024. All rights reserved.