为什么在列表理解中,我不能用过滤条件来表达无限列表的极限



在我的Haskell程序中,我想要一个表达式,本质上等价于下面的

cList = [i | i <- [1 .. ], i <= 5]

但似乎cList的评估不会终止,产生

[1, 2, 3, 5

在ghci会话中,但再也没有回来,我电脑的CPU一直在运行。

但以下等价物将按预期终止:

bList = takeWhile (<= 5) [1 ..]

表达式cList作为具有筛选条件的无限列表压缩有什么问题??

你怎么知道5后面没有小于5的数字?列表理解不能知道这一点:它们不是专门研究数字的。所以它一直在寻找,因为可能还有更多的价值。如果你知道它永远不会成功,你就必须用不同的工具说出来。

最新更新