计算列表中所有出现的原子? - LISP

时间:2013-09-21 21:36:15

标签: list count lisp

我需要编写一个函数来计算列表中给定原子的所有出现次数。这就是我所拥有的:

(defun my-count (a L)
    (cond
    ((null L) nil)
    ((equal a (car L))(+ 1 (my-count a (cdr L))))
    (t (my-count a(cdr L)))
    )
)

根据我的理解,这应该有效。然而,当我运行跟踪时,我发现当(等于汽车L)评估为真时,它会进行递归调用但不会初始化+ 1.显然我缺少了一些东西。

1 个答案:

答案 0 :(得分:3)

问题是你的空状态。你是一个递归的补充,当你完成后,你应该添加0,而不是nil:

(defun my-count (a L)
  (cond
   ((null L) 0)
   ((equal a (car L)) (+ 1 (my-count a (cdr L))))
   (t (my-count a (cdr L)))))

,例如

? (my-count 'x '(a x b))
1
? (my-count 'x '(a x  x b))
2
? (my-count 'x '(a b))
0