Haskellにはリスト用の2つの左折り関数があります:foldl
と「厳密な」バージョン、foldl'
。非厳密の問題はfoldl
、サンクの塔を構築することです。
foldl (+) 0 [1..5]
--> ((((0 + 1) + 2) + 3) + 4) + 5
--> 15
これはメモリを浪費し、リストに項目が多すぎるとスタックオーバーフローを引き起こす可能性があります。 foldl'
一方、すべてのアイテムにアキュムレータを強制します。
ただし、私が知る限り、意味的foldl'
にはと同等です。通常の形式で評価するには、ある時点でアキュムレータを強制する必要があります。ヘッドノーマルフォームが必要なければ、そもそも評価していません。foldl
foldl (+) 0 [1..5]
foldl (+) 0 [1..5]
foldl
それ以上の振る舞いをしたいという説得力のある理由はありfoldl'
ますか?