代码:
(defun len (x count)
(cond ((null x) ())
(t (+ count 1)
(len (cdr x)))))
我尝试用(len'(a b c)0)调用这个函数,我得到一个错误,说我只发送一个参数的函数,它需要两个。
我做错了什么?我特别困惑,因为我使用这个完全相同的代码运行了一次没有错误的函数,但后来它决定它不再需要工作了。
答案 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}}