Scheme嵌套列表求和函数计算异常及合约错误问题求助
解决嵌套列表元素求和的Scheme程序问题
你的代码核心问题是处理嵌套子列表时,只递归计算了子列表的和,却没有将这个结果与原列表剩余元素的和相加,导致后续元素被忽略。同时null?的终止条件必须保留,否则递归到空列表时调用car会触发合约违反错误。
修正后的代码
(define (adder a_list) (cond ((null? a_list) 0) ((list? (car a_list)) (+ (adder (car a_list)) (adder (cdr a_list)))) (else (+ (car a_list) (adder (cdr a_list)))) ) )
关键修改说明
- 第二个条件分支中,将原有的
(adder (car a_list))改为(+ (adder (car a_list)) (adder (cdr a_list))):这样既递归计算当前子列表的元素和,也会继续处理原列表中cdr部分的剩余元素,确保所有元素都被累加。 - 保留
((null? a_list) 0)作为递归终止条件:当列表处理到空时返回0,这是递归求和的基础终止逻辑,避免对空列表调用car引发错误。
测试验证
运行(adder '(2 (5 4) 6))时,计算过程为:2 + (5+4) +6 = 2+9+6=17,与预期结果一致。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

