【发布时间】:2016-11-12 08:09:48
【问题描述】:
我正在阅读 this 文章,该文章解释了 Haskell 的非严格语义。直到作者开始在 Haskell 中谈论 部分和无限列表,我才明白。
作者说:-
这个想法是将无限列表理解为部分列表的限制。
然后,作者继续解释表达式的执行:-
filter (< 3) [1..]
结果有点违背我对预期输出的直觉。我认为答案很简单:-虽然作者的解释足以理解执行过程以及我们如何获得最终结果,但它并没有解释为什么它会这样工作。[1, 2]。但是,不!
所以,我的问题是为什么无限列表表示为一堆部分列表的限制?有人可以在不深入研究复杂的数学术语的情况下解释这一点吗?
谢谢
【问题讨论】:
-
为什么你会认为结果会是
[1, 2]?filter无法知道何时停止检查元素...例如考虑:cycle [1..N]包含无限数量的1s 和2s 但如果你只看一个有限的前缀它看起来与[1..]非常相似,您可以选择任意大小的N。 -
哦,是的。对不起,我对
filter和takewhile感到很困惑。我对haskell很陌生。对不起这个愚蠢的愚蠢混乱。我现在将编辑问题。
标签: list haskell types infinite