Haskell 哈斯克尔:否定范式&x27;s函数get";“非穷举模式”;例外

Haskell 哈斯克尔:否定范式&x27;s函数get";“非穷举模式”;例外,haskell,non-exhaustive-patterns,Haskell,Non Exhaustive Patterns,测试用例:,(p∨Q) 但是,如果我将nnf(非p)=Not(nnf p)添加到函数中,它将显示 (*** Exception:: Non-exhaustive patterns in function nnf 我想知道我做错了什么?您只是在错误的位置插入了行nnf(而不是p)=……是求反的通用工具。如果您随后添加其他子句来处理更具体的否定,例如Not(和pq),它们就不可能再触发了 总括条款必须排在最后,即 Pattern match(es) are overlapped In an

测试用例:,(p∨Q)

但是,如果我将
nnf(非p)=Not(nnf p)
添加到函数中,它将显示

(*** Exception:: Non-exhaustive patterns in function nnf

我想知道我做错了什么?

您只是在错误的位置插入了行
nnf(而不是p)=……
是求反的通用工具。如果您随后添加其他子句来处理更具体的否定,例如
Not(和pq)
,它们就不可能再触发了

总括条款必须排在最后,即

Pattern match(es) are overlapped
In an equation for ‘nnf’:
    nnf (Not (Not p)) = ...
    nnf (Not (And p q)) = ...
    nnf (Not (Or p q)) = ...

你只是把线插错了地方
nnf(而不是p)=……
是求反的通用工具。如果您随后添加其他子句来处理更具体的否定,例如
Not(和pq)
,它们就不可能再触发了

总括条款必须排在最后,即

Pattern match(es) are overlapped
In an equation for ‘nnf’:
    nnf (Not (Not p)) = ...
    nnf (Not (And p q)) = ...
    nnf (Not (Or p q)) = ...

无论是谁写了评论
后条件:NNF(φ)为φ计算NNF都应该受到严厉的惩罚。为什么要拒绝暗示?实际上,这个NNF函数是连接范式(CNF)的一部分。nnf的参数是一个无隐式公式。我还完成了一个名为IMPY_FREE的函数。CNF被实现为:CNF(NNF(IMPY_FREE(Wff)))任何编写注释
postcondition:NNF(φ)为φ计算NNF的人都应该受到适当的惩罚。为什么拒绝暗示?实际上,这个NNF函数是连接范式(CNF)的一部分。nnf的参数是一个无隐式公式。我还完成了一个名为IMPY_FREE的函数。CNF实现为:CNF(NNF(无IMPY_(Wff)))
nnf (Var p) = Var p
nnf (Not (Not p)) = (nnf p)
nnf (And p q) = And (nnf p) (nnf q)
nnf (Or p q) = Or (nnf p) (nnf q)
nnf (Not (And p q)) = Or (nnf $ Not p) (nnf $ Not q)
nnf (Not (Or p q)) = And (nnf $ Not p) (nnf $ Not q)
nnf (Not p) = Not $ nnf p