1

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

(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)))
    )
)

据我了解,这应该有效。但是,当我运行跟踪时,我发现当 (equals a car L) 评估为 true 时,它​​会进行递归调用,但不会初始化 + 1。显然我缺少一些东西。

4

1 回答 1

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
于 2013-09-21T21:54:45.630 回答