我对严格与非严格的定义有疑问。Haskell wiki-book for Laziness (http://en.wikibooks.org/wiki/Haskell/Laziness) 在“黑盒严格性分析”部分下做出以下断言:
[假设函数 f 接受单个参数。] 函数 f 是严格函数当且仅当 f undefined 导致打印错误并停止我们的程序。
wiki 与 对比const
,id
分别显示非严格和严格功能。
我的问题是,我的印象是 foldl 是以非严格的方式评估的,导致不希望的空间泄漏,而 foldl' 是严格的。
然而,上面的测试似乎断言 foldl 和 foldl' 都是严格的。如果它们的任何参数未定义,则这两个函数都会产生未定义:
> 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
有人可以解释我缺少什么吗?
谢谢!