Functional programming 函数参数模式匹配
我正在对传递给函数的参数使用模式匹配。可以说,该方法对于“第一级”匹配效果很好,但任何深入的尝试都会产生错误“stdIn:282.5-291.77错误:匹配冗余” 范例Functional programming 函数参数模式匹配,functional-programming,logic,sml,smlnj,Functional Programming,Logic,Sml,Smlnj,我正在对传递给函数的参数使用模式匹配。可以说,该方法对于“第一级”匹配效果很好,但任何深入的尝试都会产生错误“stdIn:282.5-291.77错误:匹配冗余” 范例 fun nnf T = T | nnf F = F | nnf (LETTER(x)) = (LETTER(x)) | nnf (NEG(x)) = (NEG(nnf x)) | nnf (AND(x,y)) = (AND(nnf x, nnf y)) | nnf (OR(x,y)) =
fun nnf T = T
| nnf F = F
| nnf (LETTER(x)) = (LETTER(x))
| nnf (NEG(x)) = (NEG(nnf x))
| nnf (AND(x,y)) = (AND(nnf x, nnf y))
| nnf (OR(x,y)) = (OR(nnf x, nnf y))
| nnf (IMP(x,y)) = (OR(NEG(nnf x),(nnf y)))
| nnf (NEG(NEG(LETTER(x)))) = (LETTER(x))
| nnf (NEG(AND(LETTER(x),LETTER(y)))) = (OR(NEG(LETTER(x)),NEG(LETTER(y))))
| nnf (NEG(OR(LETTER(x),LETTER(y)))) = (AND(NEG(LETTER(x)),NEG(LETTER(y))));
val nnf = fn : prop -> prop
我得到的错误是
stdIn:282.5-291.77 Error: match redundant
T => ...
F => ...
LETTER x => ...
NEG x => ...
AND (x,y) => ...
OR (x,y) => ...
IMP (x,y) => ...
--> NEG (NEG (LETTER x)) => ...
--> NEG (AND (LETTER x,LETTER y)) => ...
--> NEG (OR (LETTER x,LETTER y)) => ...
所以SML说函数定义中的最后3个子句是相同的,因为它们都以“(NEG(…)”开头,尽管后面的内容不同
如何克服这一问题?案例NEG(x)
已经涵盖了涉及最外层NEG
的任何可能案例,因此无法触及其他案例。根据您实际想要实现的目标,要么移除该案例,要么在更具体的案例之后移动它(按顺序审判案例)。案例NEG(x)
已经涵盖了涉及最外层NEG
的任何可能案例,因此无法触及其他案例。根据您实际想要实现的目标,可以删除该案例,也可以将其移动到更具体的案例之后(按顺序尝试案例)