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

如何在谓词中获取非布尔值?递归清除非零元素遇cond报错

问题分析与解决

你的错误根源在于cond表达式没有覆盖所有可能的情况:当遇到非零元素时,cond里没有对应的分支,导致解释器抛出cond: all question results were false错误。另外,你的代码还缺少递归的终止条件(处理空列表的情况),否则递归会无限执行下去。

修正后的完整代码

(define (keep-zeros lst)
  (cond
    [(empty? lst) '()]  ; 递归终止:空列表返回空
    [(zero? (first lst))
     (cons (first lst) (keep-zeros (rest lst)))]  ; 元素为零,保留并递归处理剩余列表
    [else (keep-zeros (rest lst))]))  ; 元素非零,直接递归处理剩余列表

代码说明

  • 终止条件:(empty? lst)判断列表是否为空,空列表直接返回空,这是递归必须的边界条件,防止无限递归。
  • 零元素处理:当第一个元素是零时,用cons把它加入结果,再递归处理列表的剩余部分。
  • 非零元素处理:else分支覆盖了所有非零的情况,直接跳过当前元素,递归处理剩余列表,这样cond就不会出现无匹配分支的错误。

测试示例

调用(keep-zeros '(3 0 5 0 7))会返回(0 0),符合你保留所有零元素的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:30:57