ブール式を単純化する関数を書いています。たとえば、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 を学ぶことではなく、とにかく私自身の方法で解決しました。