我是Haskell的初学者,即使在阅读了有关foldr/foldl的几种解释之后,我仍然不明白为什么我在下面得到不同的结果。有什么解释?

Prelude> foldl (\_ -> (+1)) 0 [1,2,3]
4
Prelude> foldr (\_ -> (+1)) 0 [1,2,3]
3

谢谢!

最佳答案

foldl情况下,lambda作为第一个参数传递给累加器,第二个参数传递给list元素。在foldr情况下,lambda作为第一个参数传递给list元素,第二个参数传递给累加器。

您的lambda会忽略第一个参数,并在第二个参数上加上1,因此在foldl情况下,您将1添加到最后一个元素,在foldr情况下,您正在计算列表中的元素数。

关于haskell - foldl/foldr查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6050306/

10-13 07:16