如何编写及调试Scheme过程实现嵌套列表内所有奇数的求和?
代码问题分析
- 语法错误:cond分支结构书写错误。你的第三个条件分支
((= (modulo (car ls) 2) 1)) (+ (car ls) (sumodd (cdr ls)))不符合cond的(条件 执行表达式)语法,条件后多闭合了一个括号,导致求和表达式完全脱离了该条件分支,逻辑执行完全不符合预期。 - 逻辑缺失:嵌套子列表处理分支只计算了当前子列表的奇数和,没有累加当前列表剩余元素的奇数和,处理完子列表后会直接丢弃后续所有元素的计算结果。
修正后的完整代码
(define (sumodd ls) (cond ((null? ls) 0) ((list? (car ls)) (+ (sumodd (car ls)) (sumodd (cdr ls)))) ((= (modulo (car ls) 2) 1) (+ (car ls) (sumodd (cdr ls)))) (else (sumodd (cdr ls)))))
验证测试
输入示例(sumodd '(1 (2 () 6) 3 (5) 2)),执行结果为9,符合需求。
内容的提问来源于stack exchange,提问作者Tyson Nguyen
相关产品推荐
相关产品推荐

