这个 Haskell 语言的语句是什么意思?

6

我目前正在学习Haskell,学习的主题是模式匹配。在Haskell中,_ && _ = False 是什么意思?我在一张讲义幻灯片中看到了这个语句,不知道下划线代表什么?谢谢!


没有看到讲座内容(因为您在问题中没有提供其他上下文),很难确定,但我怀疑下划线只是两个布尔表达式的占位符。建议向您的讲师求证。 - Robert Harvey
2
这并不难确定,这是一项有充分记录的语言特性。 - Daniel Wagner
2个回答

6

下划线是通配符。也就是说,它们可以匹配任何值,但不会将该值绑定到名称上。这种用法的一个常见例子是:

True && True = True
_ && _ = False

4

下划线代表一个通配符,可以绑定任何值。这意味着对于给定函数类型的左右操作数的任何值,它都将触发该条款,从而返回False

因此,可以使用以下方式定义(&&) :: Bool -> Bool -> Bool

(&&) :: Bool -> Bool -> Bool
True && True = True
_ && _ = False
< p > (&&)的实际实现在其第二个参数上是惰性的,并且实现为如下[src]:

-- | Boolean \"and\"
(&&)                    :: Bool -> Bool -> Bool
True  && x              =  x
False && _              =  False

如果您不介意的话,能否详细解释一下您所说的“触发该子句”的部分?我还是有点不明白,非常感谢!!@WillemVanOnsem - hamburgerwhoselflearns
@hamburgerwhoselflearns:它意味着返回等号右侧的表达式。因此,如果您编写True && False,它将从上到下评估子句。第一个子句不匹配(因为有两个“True”),因此它查找下一个子句,并且该模式将“触发”,因此它将返回False - Willem Van Onsem
所以基本上下划线也可以表示任何非空列表,对吧? - hamburgerwhoselflearns
@hamburgerwhoselflearns 下划线会匹配非空列表,是的;但这个问题在这里有点奇怪,因为 (&&) 的类型表明它的参数不是列表,所以你永远不会尝试将列表与模式 _ 匹配。 - Daniel Wagner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接