gpt4 book ai didi

haskell - 如何在 Haskell 中过滤无限列表

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

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




9年前关闭。




Possible Duplicate:
Finite comprehension of an infinite list



我不明白为什么 ghci 不能正确计算这段代码?
[x | x <- [1..], x < 1000]

Ghci 仅在最后一个数字处停止,我需要在命令行中中断此过程以恢复正常状态。怎么了?由于 haskell 的惰性评估,我希望这段代码应该可以工作。

最佳答案

[x | x <- [1..], x < 1000] 等价于 filter (< 1000) [1..] ;你想要 takeWhile (< 1000) [1..] 代替。

那么 filtertakeWhile 有什么区别呢?

好吧,如果您尝试评估整个结果 --- 这就是 ghci 所做的,以便打印它 --- 那么 filter 将测试输入列表中的每个元素以确定它是否应该在输出列表中。在前一千个元素之后?它进行测试。 filter 不知道它不会突然遇到 ..., 12345, 12346, -7, 12348, ...

另一种看待它的方式是,一旦到达输入列表的末尾,filter 只能说“输出列表到此结束”。如果你给它一个无限列表,它永远不能确定它已经生成了输出列表的所有元素。所以它看起来会挂起。

另一方面, takeWhile 会在到达不符合条件的元素时立即停止并终止其输出列表。

关于haskell - 如何在 Haskell 中过滤无限列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541034/

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