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