8
我注意到有Haskell和当谈到foldl
二郎之间的差异。Haskell与erlang:foldl的区别?
对于foldr
,两种语言返回相同的结果:
foldr (\x y -> 2*x+y) 4 [1, 2, 3] -- returns 49
lists:foldr(fun(X, Y) −> X+2∗Y end, 4, [1,2,3]). % returns 49
但foldl
的返回值是不同的:
foldl (\x y -> x+2*y) 4 [1, 2, 3] -- returns 16
lists:foldl(fun(X, Y) −> X+2∗Y end, 4, [1,2,3]). -- returns 43
这怎么差别来解释?
的参数foldl'的'的第一个参数的顺序和'foldr'似乎是在Haskell不同:'与foldl ::可折叠吨=>(B - >一 - > B) - >乙 - > TA - > b'和'foldr ::可折叠t =>(a→b→b)→b→ta→b'。 – Dogbert
'2 * X + y' VS'X + 2 * Y' - 的是,意图? – chi
@chi非常仔细,事实证明我混合了这两个!然而,问题依然存在,只不过它现在正好相反......'foldr'表现相同,但foldl'返回一个不同的数字。 –