厳密と非厳密の定義について質問があります。怠惰のためのHaskellwiki-book(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
誰かが私が欠けているものを説明してもらえますか?
ありがとう!