Lisp:为什么说我只给我的函数一个参数?

时间:2012-11-12 01:36:15

标签: parameters lisp

代码:

(defun len (x count)
  (cond ((null x) ())
        (t (+ count 1)
           (len (cdr x)))))

我尝试用(len'(a b c)0)调用这个函数,我得到一个错误,说我只发送一个参数的函数,它需要两个。

我做错了什么?我特别困惑,因为我使用这个完全相同的代码运行了一次没有错误的函数,但后来它决定它不再需要工作了。

2 个答案:

答案 0 :(得分:4)

(len '(a b c) 0)具有正确数量的参数,但是函数(len (cdr x))内的递归调用却没有。它缺少计数的第二个参数。

在相关的说明中,您正在计算(+ count 1),但之后没有对计算结果做任何事情。

答案 1 :(得分:2)

增加@ sepp2k的答案,您要做的是将增加的count作为第二个参数传递给len,并且还返回count而不是NIL (defun len (x &optional (count 0)) (if x (len (cdr x) (1+ count)) count)) 表示空参数:

{{1}}