编码:
(defun len (x count)
(cond ((null x) ())
(t (+ count 1)
(len (cdr x)))))
我尝试使用 (len '(abc) 0) 调用此函数,但我收到一条错误消息,指出我只发送函数一个参数,它需要两个参数。
我究竟做错了什么?我特别困惑,因为我使用完全相同的代码运行了一次函数而没有错误,但后来它决定它不想再工作了。
编码:
(defun len (x count)
(cond ((null x) ())
(t (+ count 1)
(len (cdr x)))))
我尝试使用 (len '(abc) 0) 调用此函数,但我收到一条错误消息,指出我只发送函数一个参数,它需要两个参数。
我究竟做错了什么?我特别困惑,因为我使用完全相同的代码运行了一次函数而没有错误,但后来它决定它不想再工作了。
具有(len '(a b c) 0)
正确数量的参数,但是您在函数内部的递归调用(len (cdr x))
, 没有。它缺少计数的第二个参数。
在相关说明中,您正在计算(+ count 1)
,但没有对计算结果做任何事情。
增加@sepp2k 的答案,您想要做的是将递增count
的作为第二个参数传递给len
,并且还返回count
而不是NIL
空参数:
(defun len (x &optional (count 0))
(if x
(len (cdr x) (1+ count))
count))