我是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/