如何在Scheme中编写函数统计列表内可整除指定数值的元素个数
Scheme numDivisors 函数实现修正方案
现有代码问题
- 硬编码了固定数值
10做整除判断,没有使用传入的参数,无法适配任意输入的n - 条件分支缺失,没有处理「当前元素不符合要求」的场景,运行时会出现无返回值报错
- 数值相等判断用
eq?不严谨,Scheme中数值相等判断推荐使用=
正确实现代码
(define numDivisors (lambda (n listOfNums) (cond ((null? listOfNums) 0) ((= (remainder n (car listOfNums)) 0) (+ 1 (numDivisors n (cdr listOfNums)))) (else (numDivisors n (cdr listOfNums))))))
功能验证
调用示例 (numDivisors 10 '(1 20 30 2 5 40 10 60)) 运行结果为4,和预期一致。
如果需要兼容列表可能出现0的场景,避免除零错误,可以增加非零判断:
(define numDivisors (lambda (n listOfNums) (cond ((null? listOfNums) 0) ((and (not (= (car listOfNums) 0)) (= (remainder n (car listOfNums)) 0)) (+ 1 (numDivisors n (cdr listOfNums)))) (else (numDivisors n (cdr listOfNums))))))
内容的提问来源于stack exchange,提问作者newcoder
相关产品推荐
相关产品推荐

