gpt4 book ai didi

haskell - 为什么这个 Haskell 代码不会终止?

转载 作者:行者123 更新时间:2023-12-03 15:27:46 25 4
gpt4 key购买 nike

为什么以下 Haskell 代码不会终止:

foldr (||) True $ repeat False -- never terminates

当这样的事情发生时:
foldr (||) False $ repeat True -- => True

对我来说,第二个表达式看起来更麻烦的是不终止。我对 Haskell 的惰性求值的看法有什么问题?

最佳答案

我认为您对惰性的理解是正确的,但对于 foldr 则不然.让我们看看它的“specification

foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...)

然后看你的表情
foldr (||) True $ repeat False -- never terminates

如您所见 True ( z ) 我们正在“寻找”得到 ||在整个列表被消耗之前,不会到达终止。这不会发生,因为列表是无限的。

这也应该解释实际终止的例子。

关于haskell - 为什么这个 Haskell 代码不会终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960543/

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