lisp中的递归列表函数,用于查找列表中存在的次数

时间:2016-01-08 21:31:52

标签: recursion lisp common-lisp

;问题3

(defun listcheck(lst)
  (cond
   ((not (null lst))
    (cond
     ((eq (car lst) 'a) (+ (listcheck (cdr lst)) 1))
     ( T (listcheck (cdr lst)))
     )
    )
   )
  0
  )

此函数始终打印0,不确定哪里出错,任何输入都会有帮助

1 个答案:

答案 0 :(得分:2)

它正在打印0,因为该功能以0之外的cond结尾。所以它在所有情况下都返回它,而不仅仅是递归的基础。只有在lst为空时才会返回。

(defun listcheck(lst)
  (cond ((null lst) 0)
        ((eq (car lst) 'a) (+ (listcheck (cdr lst)) 1))
        (T (listcheck (cdr lst)))))