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

使用模式匹配修复Haskell判断Formula列表全为真的eval_list函数

问题排查
  • 类型不匹配:你定义的eval_list接收[Formula]列表类型参数,但代码中递归调用eval_list f时传入的f是单个Formula类型,类型不匹配无法通过编译。
  • 缺失空列表分支:没有匹配空列表的模式,传入空列表时会触发运行时匹配错误,按照“所有元素求值为真则返回真”的语义,空列表应返回True(逻辑与的单位元)。
  • 缺少单个Formula的求值逻辑:没有针对Formula三个构造子And、Not、Con的求值实现,无法计算单个公式的布尔结果。
修复实现

首先实现单个公式的求值函数eval,再基于模式匹配实现列表的批量判断:

-- 单个Formula求值函数
eval :: Formula -> Bool
eval (Con b) = b
eval (Not f) = not (eval f)
eval (And f1 f2) = eval f1 && eval f2

-- 修复后的列表求值函数
eval_list :: [Formula] -> Bool
eval_list [] = True
eval_list (f:fx) = eval f && eval_list fx

如果不需要强制显式写递归,也可以直接用标准库的all高阶函数简化实现,效果完全一致:

eval_list :: [Formula] -> Bool
eval_list = all eval
测试示例
testInput :: [Formula]
testInput = [And (Con True) (Not (Con False)), Con True, Not (Con False)]
-- 运行 eval_list testInput 输出结果为 True

内容的提问来源于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:27:01