我是Haskell中的总计n00b,我正在尝试使用DPLL编写简单的SAT求解器。在Haskell中简化构造函数标签
我有一个函数展开,从(A1 and A2 ...) Or (B1 and B2 ...)
到一个模式,结合正常形式:(A1 or B1) and (A1 or B2) and ... (A2 or B2) and ...
。
我代表我的表达数据类型如下
type Term = Int
data Expr = Or Expr Expr | And Expr Expr | Literal Term
(我不关心否定,因为我不能代表(X)与-x)
但现在,写作拓展,使用构造函数标签看起来非常难看。
expnd (Literal l) (Literal r) = Or (Literal l) (Literal r)
expnd (Literal t) (And l r) = And (expnd (Literal t) l) (expnd (Literal t) r)
expnd (And l r) (Literal t) = And (expnd l (Literal t)) (expnd r (Literal t))
expnd (And l1 r1) (And l2 r2) =
And (And (expnd l1 l2) (expnd l1 r2)) (And (expnd r1 l2) (expnd r1 r2))
我可以让这个代码更清洁吗?
谢谢。这是我一直在寻找的。 – avak