-1

编码:

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

我尝试使用 (len '(abc) 0) 调用此函数,但我收到一条错误消息,指出我只发送函数一个参数,它需要两个参数。

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

4

2 回答 2

4

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

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

于 2012-11-12T02:17:51.980 回答
2

增加@sepp2k 的答案,您想要做的是将递增count的作为第二个参数传递给len,并且还返回count而不是NIL空参数:

(defun len (x &optional (count 0))
  (if x 
      (len (cdr x) (1+ count))
      count))
于 2012-11-12T14:23:07.017 回答