我正在用Lisp(常用的Lisp方言)编写一个程序。。
我希望程序计算列表中的子列表数。。
这是我迄今为止写的:

(defun llength (L)
      (cond
          ((null L)   0)
          ((list (first L)) (progn (+ (llength (first L)) 1) (llength (rest L))))
          ((atom (first L)) (llength (rest L)))
      )
)

函数返回错误“Unbound variable:LLENGTH”,我不明白为什么或如何修复它。。
有什么建议吗?

最佳答案

(defun llength (list)
  (cond
    ((null list) 0)
    ((listp (first list))
     ;; 1 + the count of any sub-lists in this sub-list + the
     ;; count of any sub-lists in the rest of the list.
     (+ 1 (llength (first list))
        (llength (rest list))))
    (t (llength (rest list)))))

测试:
> (llength '(1 2 3 4))
0
> (llength '(1 2 (3 4)))
1
> (llength '(1 2 (3 (4))))
2
> (llength '(1 2 (3 4) (5 6) (7 8) (9 (10 (11)))))
6

09-10 08:40