Haskell:带有括号的运算符 (==) 的“foldl”混淆

Haskell: Confusion over 'foldl' with parenthesized operator (==)

提问人:Daniel Philpott 提问时间:12/15/2017 更新时间:12/15/2017 访问量:178

问:

以下是将“foldl”应用于这个特定的相等运算符的一些结果。我不明白它们 - 我认为每一行都应该返回 true,因为“False == False == False ......”无论列表的长度如何,都是 true。我对 Haskell 很陌生。

Prelude> foldl (==) False [False]
True
Prelude> foldl (==) False [False,False,False]
True
Prelude> foldl (==) False [False,False,False,False]
False
Prelude> foldl (==) False [False,False,False,False,False]
True
Prelude> foldl (==) False [False,False,False,False,False,False]
False

我在尝试编写一个函数时发现了这些结果,该函数测试函数列表在应用于公共参数(返回布尔值)时是否给出相同的结果。

Haskell 式折叠

评论

7赞 Alexis King 12/15/2017
==是一个二进制运算符。当你写作的时候,你真的在写作,这是。也许现在你可以理解发生了什么。False == False == False(False == False) == FalseTrue == False
0赞 Daniel Philpott 12/15/2017
答案是肯定的!非常感谢。
0赞 chepner 12/15/2017
如果您熟悉 Python,您可能会将其与 Python 的比较链接混淆,其中确实等价于 .False == False == ... == False(False == False) and (False == False) and ... and (False == False)
0赞 Daniel Philpott 12/15/2017
是的,我误解了折叠函数的包围式括号。
0赞 Karl Bielefeldt 12/15/2017
仅供参考,要检查是否所有元素都是 ,请使用 .Falseall (==False) [False, False,False]

答:

4赞 Daniel Philpott 12/15/2017 #1

== 是二进制运算符。当你写 False == False == False 时,你实际上是在写 (False == False) == False,即 True == False。也许现在你可以理解发生了什么。

'Alexis King'在评论中提交的答案