You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scheme嵌套列表奇数原子求和报contract violation错误如何解决?

嵌套列表奇数求和问题修复方案

错误原因

原代码存在两个核心问题导致运行报错且逻辑不符合需求:

  • 分支语法错误:cond的最后一个匹配分支缺少else关键字,匹配到该分支时会错误返回列表类型的(cdr list)而非数值,加法运算收到非数值参数直接触发契约违规报错。
  • 嵌套列表处理逻辑缺失:检测到当前首元素为列表时,仅跳过该元素处理剩余列表,没有递归遍历嵌套列表内部的元素,既漏统计了嵌套列表中的奇数,也没有正确处理()类型的空列表子元素。

修复后代码

(define (sumodd lst)
  (cond 
    ;; 递归终止条件:空列表求和为0
    ((null? lst) 0)
    ;; 首元素是列表:递归计算子列表奇数和 + 剩余列表奇数和
    ((list? (car lst)) (+ (sumodd (car lst)) (sumodd (cdr lst))))
    ;; 首元素是奇数:累加首元素 + 剩余列表奇数和
    ((odd? (car lst)) (+ (car lst) (sumodd (cdr lst))))
    ;; 其余情况(首元素为偶数):直接返回剩余列表奇数和
    (else (sumodd (cdr lst)))
  ))

运行验证

执行测试用例:
(sumodd '(1 (2 () 6) 3 (5) 8))
返回结果为9,与预期结果(1+3+5)一致。

内容的提问来源于stack exchange,提问作者berkleybaby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:54:04