在我的Haskell程序中,我想要一个表达式,本质上等价于下面的
cList = [i | i <- [1 .. ], i <= 5]
但似乎cList
的评估不会终止,产生
[1, 2, 3, 5
在ghci会话中,但再也没有回来,我电脑的CPU一直在运行。
但以下等价物将按预期终止:
bList = takeWhile (<= 5) [1 ..]
表达式cList
作为具有筛选条件的无限列表压缩有什么问题??
你怎么知道5后面没有小于5的数字?列表理解不能知道这一点:它们不是专门研究数字的。所以它一直在寻找,因为可能还有更多的价值。如果你知道它永远不会成功,你就必须用不同的工具说出来。