我需要编写一个函数来计算列表中给定原子的所有出现次数。这就是我所拥有的:
(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.显然我缺少了一些东西。
答案 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