在常见的lisp中对可选参数使用COND

时间:2017-02-01 10:35:41

标签: lisp common-lisp optional-parameters

我在编写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)出了问题,你能帮我解决这个问题吗? 感谢

1 个答案:

答案 0 :(得分:7)

=函数以及其他一些函数只能使用数字。

当您希望NIL成为有效输入时,您需要使用EQL或更一般的相等比较(等于,等于p);这里,NIL是预期的,因为它是可选参数的默认值。

您还可以为cont提供数字默认值:

 ... &optional (cont 0) ...

...如果cont没有理由不是数字,那么这可能是正确的做法。