Haskell 哈斯克尔:无限列表-哈斯克尔有多懒?

Haskell 哈斯克尔:无限列表-哈斯克尔有多懒?,haskell,Haskell,哈斯克尔有多懒 为什么下面的人不知道什么时候停止 sum ([n^2 | n <- [1..], odd (n^2), n^2 < 100]) sum([n^2 | n仅仅因为11^2大于100并不意味着13^2大于100。好吧……是的,但GHC应该如何理解这一点?它是一个编译器,而不是任意数学真理的证明者。这不是关于它有多懒,而是它是否有可能知道n^2=在Monadtypeclass中,列表是concatMap。因为所有这些东西都是非常愚蠢的,所以你可以很容易地理解所有发生的事情

哈斯克尔有多懒

为什么下面的人不知道什么时候停止

sum ([n^2 | n <- [1..], odd (n^2), n^2 < 100])

sum([n^2 | n仅仅因为11^2大于100并不意味着13^2大于100。好吧……是的,但GHC应该如何理解这一点?它是一个编译器,而不是任意数学真理的证明者。

这不是关于它有多懒,而是它是否有可能知道
n^2<100
永远不会一次是真的一次是假的一次不是


数组的这些部分是筛选表达式,而不是停止条件。

您给出的表达式有效地分解为:

sum$do

n>=
Monad
typeclass中,列表是
concatMap
。因为所有这些东西都是非常愚蠢的,所以你可以很容易地理解所有发生的事情。

除了其他一些有点神奇的特性之外,用户似乎认为函数编译器比普通编译器有……自动记忆、任意部分evaluation,algebratic rewriting..。@ThomasM.DuBuisson公平地说,haskell的爱好者们非常喜欢称赞GHC是hella smart,所以我可以看出这是从哪里来的。属性也取决于类型。想象一个环,其中
x^2>100
(成功x)^2<100
-第一个过滤元素并不意味着所有类型都不会有更多的过滤元素。事实上,如果没有类型注释,则可能会将此表达式实例化为
Num
类型,并表示模为512的无符号整数。