gpt4 book ai didi

haskell - 为什么 `and` 为空可折叠返回 True 而 `or` 在 Haskell 中返回 False?

转载 作者:行者123 更新时间:2023-12-03 22:10:38 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why "and []" is True and "or []" is False

(7 个回答)


2年前关闭。




是否有理由可以解释是否可以预期这样的结果?它们比未定义更好吗?

>>> any (const True) []
False

>>> any (const False) []
False

>>> or []
False

>>> and []
True

我真的不明白报告想说什么:
-- and returns the conjunction of a Boolean list. For the result to be
-- True, the list must be finite; False, however, results from a False
-- value at a finite index of a finite or infinite list. or is the
-- disjunctive dual of and.
and, or :: [Bool] -> Bool
and = foldr (&&) True
or = foldr (||) False

最佳答案

为了扩展 Dan 的答案,真值的空列表的合取为真 True允许您将连接的预期属性扩展到这种情况。

例如,我们希望,

and (xs ++ ys) = (and xs) && (and ys) 

和所有 xs我们有, xs = xs ++ []所以,
  and xs 
= and (xs ++ [])
= (and xs) && (and [])

考虑到 and xs可能是 TrueFalse它遵循,
True  = True  && (and [])
False = False && (and [])

因此我们必须有 and []True .

关于haskell - 为什么 `and` 为空可折叠返回 True 而 `or` 在 Haskell 中返回 False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com