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

修复Haskell中提取Formula类型Con构造子布尔值的enumerate_con函数

enumerate_con 函数修复说明

功能需求

enumerate_con函数需要遍历Formula类型值,返回其中所有Con构造子包含的布尔值组成的列表,符合以下测试用例:

  • 调用enumerate_con(Not(And(Con False)(Con True)))应当返回[False, True]
  • 调用enumerate_con(And(Con False)(Con False))应当返回[False, False]
    Formula类型定义如下:
data Formula = And Formula Formula
              | Not Formula
              | Con Bool
              deriving Show

原代码错误点

原代码存在三处核心问题:

  1. And分支逻辑错误:只递归处理了第二个参数q2,完全未处理第一个参数q1,且重复拼接了q2的返回结果,导致收集的布尔值缺失且顺序错误
  2. Not分支逻辑错误:硬编码匹配Not后直接跟Con的场景,未覆盖Not后嵌套其他Formula结构(如And、另一个Not)的合法场景
  3. Con分支返回值类型错误:直接返回布尔值b,不符合函数声明的[Bool]返回类型要求

修复后代码

enumerate_con :: Formula -> [Bool]
enumerate_con (And q1 q2) = enumerate_con q1 ++ enumerate_con q2
enumerate_con (Not f) = enumerate_con f
enumerate_con (Con b) = [b]

验证说明

修复后的代码递归遍历所有Formula结构:

  • 遇到And构造子时先遍历左子公式再遍历右子公式,拼接两者结果保证顺序正确
  • 遇到Not构造子时直接递归遍历其包裹的子公式,不受嵌套结构限制
  • 遇到Con构造子时将包裹的布尔值放入列表返回,符合返回类型要求
    测试两个预设用例均可得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:36:03