我有一个关于严格与非严格定义的问题.Haskell wiki-laziness(http://en.wikibooks.org/wiki/Haskell/Laziness)在"黑盒严格性分析"一节中做出以下断言:
[假设函数f采用单个参数.]当且仅当f未定义导致打印错误并停止我们的程序时,函数f才是严格函数.
维基对比const用id,分别表示一个非严格和严格的功能.
我的问题是,我认为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)
有人可以解释一下我缺少的东西吗?
谢谢!