如何在LISP中编写统计给定参数中0的个数的函数
LISP 统计列表中0出现次数的函数实现
最简实现
直接调用Common Lisp内置的序列统计函数count即可,代码如下:
(defun count_number_of_0 (lst) (count 0 lst))
测试调用:
(count_number_of_0 '(1 0 5 9 0 0 0 7 1 0))
返回结果:5,完全匹配预期输出。
手写递归实现(无内置函数依赖)
如果要手动实现遍历逻辑,可以用递归逐元素判断,逻辑非常直观:
- 空列表没有任何元素,0的个数为0,作为递归终止条件
- 列表首元素等于0时,计数+1,再递归统计列表剩余部分
- 列表首元素不等于0时,直接递归统计列表剩余部分
对应代码:
(defun count_number_of_0 (lst) (cond ((null lst) 0) ((eql (car lst) 0) (1+ (count_number_of_0 (cdr lst)))) (t (count_number_of_0 (cdr lst)))))
注意:这里用
eql做相等判断,针对整数0的比较场景效率和准确性都最优。
内容的提问来源于stack exchange,提问作者Sonu
相关产品推荐
相关产品推荐

