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

实现逻辑命题求值函数有没有更简便的模式匹配方案?

优化实现方案

你不需要枚举所有表达式结构的组合,只需要通过递归对嵌套的子表达式逐层求值即可,思路是不管当前运算符的子表达式是什么结构,先递归计算出子表达式的布尔结果,再做当前层的逻辑运算。

首先先定义命题公式的代数数据类型:

data Prop = X | Y | Tr | Fa | Not Prop
          | Prop :&;: Prop
          | Prop :|: Prop
          | Prop :->: Prop
          deriving (Eq, Show)

对应的eval函数实现如下:

eval :: Bool -> Bool -> Prop -> Bool
-- 处理原子命题和常量
eval xVal yVal X = xVal
eval xVal yVal Y = yVal
eval _ _ Tr = True
eval _ _ Fa = False
-- 处理一元逻辑非
eval xVal yVal (Not p) = not $ eval xVal yVal p
-- 处理二元逻辑运算,先递归计算左右子表达式的值再运算
eval xVal yVal (p :&;: q) = eval xVal yVal p && eval xVal yVal q
eval xVal yVal (p :|: q) = eval xVal yVal p || eval xVal yVal q
eval xVal yVal (p :->: q) = not (eval xVal yVal p) || eval xVal yVal q

这个实现可以处理任意嵌套深度的命题公式,你给出的测试用例运行结果完全符合预期:

> eval False False ((X :->: Y) :&;: (Not Y :|: X))
True
> eval False True  ((X :->: Y) :&;: (Not Y :|: X))
False
> eval True  False ((X :->: Y) :&;: (Not Y :|: X))
False
> eval True  True  ((X :->: Y) :&;: (Not Y :|: X))
True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:57:07