相关疑难解决方法(0)

Haskell - 严格与非严格的foldl

我有一个关于严格与非严格定义的问题.Haskell wiki-laziness(http://en.wikibooks.org/wiki/Haskell/Laziness)在"黑盒严格性分析"一节中做出以下断言:

[假设函数f采用单个参数.]当且仅当f未定义导致打印错误并停止我们的程序时,函数f才是严格函数.

维基对比constid,分别表示一个非严格和严格的功能.

我的问题是,我认为foldl是以非严格的方式进行评估,造成不良的空间泄漏,而foldl'则是严格的.

然而,上述测试似乎断言foldl和foldl'都是严格的.如果它们的任何参数未定义,那么两个函数都会生成undefined:

> Data.List.foldl (+) undefined [1,2,3,4]
    Prelude.undefined
> Data.List.foldl' (+) 0 undefined
    Prelude.undefined
> Data.List.foldl' (+) undefined [1,2,3,4]
    Prelude.undefined
> Data.List.foldl (+) 0 undefined
    Prelude.undefined
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下我缺少的东西吗?

谢谢!

haskell strict lazy-evaluation fold

11
推荐指数
1
解决办法
1440
查看次数

标签 统计

fold ×1

haskell ×1

lazy-evaluation ×1

strict ×1