Haskell类实例定义中f _ = False的必要性?移除后结果一致存疑
关于Haskell代码中冗余行的解释
这行f _ = False完全是冗余的,没必要添加,移除后结果一致的原因如下:
- 你的类型定义
data A = B | C deriving(Eq)限定了A类型只有B和C两个可能的取值,不存在其他情况。 - 第一个函数定义
f x = x == C已经覆盖了所有输入场景:- 当输入为
C时,C == C返回True; - 当输入为
B时,B == C返回False。
- 当输入为
- Haskell的模式匹配遵循从上到下依次匹配的规则,第一个定义里的
x是通配模式,可以匹配所有A类型的值,因此后面的f _ = False永远不会被执行到,移除它对程序逻辑没有任何影响。
哪怕后续给A类型新增构造器(比如添加D),f x = x == C依然能正确处理所有情况——新构造器和C比较会返回False,和保留那行冗余代码的结果完全一致。
内容的提问来源于stack exchange,提问作者zeppal
相关产品推荐
相关产品推荐

