相关疑难解决方法(0)

隐含Haskell模式匹配中的相等性

我正在编写一个函数来简化布尔表达式.例如,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')
Run Code Online (Sandbox Code Playgroud)

编译后,我收到错误:

Conflicting definitions for `q'
Bound at: boolean.hs:73:21
          boolean:73:29
In an equation for `simplify'
Run Code Online (Sandbox Code Playgroud)

我想我明白发生了什么,我已经解决了,但我只是想知道:

  1. 为什么这种模式匹配不可能?
  2. 是否有惯用的解决方法?

完全披露:这与家庭作业有关,但课程的目的不是要学习Haskell,而是我已经以自己的方式解决了这个问题.

haskell boolean-logic pattern-matching

10
推荐指数
2
解决办法
2825
查看次数

标签 统计

boolean-logic ×1

haskell ×1

pattern-matching ×1