我正在编写一个函数来简化布尔表达式。例如,Nand(A, A) == Not(A)
。我尝试使用模式匹配来实现这个特定的规则,如下所示:
-- Operands equivalent - simplify!
simplify (Nand q q) = Not (simplify q)
-- Operands must be different, so recurse.
simplify (Nand q q') = Nand (simplify q) (simplify q')
编译后,我收到错误:
Conflicting definitions for `q'
Bound at: boolean.hs:73:21
boolean:73:29
In an equation for `simplify'
我想我了解发生了什么,并且我已经解决了它,但我只想知道:
- 为什么这种模式匹配不可能?
- 有惯用的解决方法吗?
完全披露:这与家庭作业有关,但课程的目的不是学习 Haskell,反正我已经用自己的方式解决了。