任何人都可以解释如何foldl
工作?
我知道,例如,foldr (-) 0 [1,2,3]
产生 (1 - (2 - (3 - 0))),而foldl (-) 0 [1,2,3]
产生 (((0 - 1) - 2) - 3),但我还有一些问题:
第一个示例(带有 foldr/foldl 的列表的长度):
foldr (\_ acc -> acc + 1) 0 [1,2,3,4,5]
按预期生成 5。
foldl (\_ acc -> acc + 1) 0 [1,2,3,4,5]
产生6。:|
foldl (\_ acc -> acc + 1) 0 [2]
产生3。:|
foldl 对这些给定的例子有何反应?第二个例子:
foldr (:) [] [1,2,3,4]
产生 [1,2,3,4] - 不用担心,但foldl (:) [] [1,2,3,4]
给我一个错误:Occurs check: cannot construct the infinite type: a ~ [a]
foldl 有什么问题?