使用Scheme高阶函数filter实现count-zeros过程统计列表中0的数量
Scheme count-zeros 实现修正
错误点说明
- 你编写的
count-zeros函数存在参数传递错误:length lst返回的是列表长度的数值,而你自定义的filter函数要求第二个参数为待过滤的列表,类型不匹配导致代码无法运行。 - 逻辑顺序颠倒:你的核心思路是正确的,即先筛选所有0再统计数量,只需要调整执行顺序即可。
修正后完整代码
(define filter (lambda (pred a-list) (if (null? a-list) '() (if (pred (car a-list)) (cons (car a-list) (filter pred (cdr a-list))) (filter pred (cdr a-list)))))) (define (count-zeros lst) ; 先过滤出列表中所有为0的元素,再统计过滤结果的长度 (length (filter zero? lst)))
运行验证
调用示例 (count-zeros '(1 1 0 1 0 0)) ,返回结果为3,符合预期。
内容的提问来源于stack exchange,提问作者ivanka georgieva
相关产品推荐
相关产品推荐

