lisp - 在 common lisp 中对可选参数使用 COND

标签 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) 有问题,你能帮我解决这个问题吗? 谢谢

最佳答案

=功能以及其他一些功能,只需要数字。

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

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

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

...如果 cont 没有理由只能是数字,这可能是正确的方法。

关于lisp - 在 common lisp 中对可选参数使用 COND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977538/

相关文章:

unit-testing - 为什么使用 Rackunit 进行的这个测试不起作用?

common-lisp - 如何在 Common Lisp 中要求关键字参数?

lisp - System.exit(0) 的 lisp 等价物是什么?

api - 如何使用 reitit clojure 定义可选查询参数

lisp,如何消除重启

linux - 控制台上的 SLIME

excel - VBA:检查可选参数

ios - Swift:如何将函数类型值设置为可选变量?

lisp - 为什么 (apply and '(1 2 3)) doesn' t work while (and 1 2 3) works in R5RS?

macros - defmacro 形式参数列表中 `(&rest xs)` 和 `xs` 之间的差异