问题描述
我在 Haskell 中创建了一个函数来计算给定表达式中函数和运算符的数量。
size :: Expr -> Int
size (Num n) = 1
size x = 1
size (Function f e) = 1 + size e
size (Operation o e1 e2) = 1 + size e1 + size e2
虽然它按预期工作没有任何错误,但我收到警告:[-Woverlapping-patterns] 说模式匹配是多余的。任何建议将不胜感激!
解决方法
case
子句的顺序很重要 - 传入的值从上到下与模式匹配,如果这些检查中的任何一个成功,则采用该选项。在您的情况下,变量 x
将通过将 x
分配给该事物来成功匹配 anything。因此,它下面的所有情况都不会被考虑。
也许你想要:
size :: Expr -> Int
size (Num n) = 1 -- btw,you can skip this line
size (Function f e) = 1 + size e
size (Operation o e1 e2) = 1 + size e1 + size e2
size x = 1