我在编写 LISP 函数时遇到了一些问题。函数定义为
(defun foo (arg1 &optional cont))
(cond ((null arg1) nil)
((= 0 cont) arg1)
((do_something))
((recursive call))))
当我用 cont
调用函数时,一切正常,但是当我只用 arg1 调用它时,返回的错误是:
Error: in ZEROP of (NIL) arguments should be of type NUMBER
我猜条件 ((= 0 cont) arg1)
有问题,你能帮我解决这个问题吗?
谢谢
最佳答案
=
功能以及其他一些功能,只需要数字。
您需要使用 EQL
或者当您期望 NIL 是有效输入时,进行更一般的相等比较 (equal, equalp);在这里,NIL 是预期的,因为它是可选参数的默认值。
您还可以为 cont
提供一个数字默认值:
... &optional (cont 0) ...
...如果 cont
没有理由只能是数字,这可能是正确的方法。
关于lisp - 在 common lisp 中对可选参数使用 COND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977538/