我遇到了一個問題。這兩個功能有什麼區別:Haskell函數foldl( x y - > x * 2 + y * 2)0行爲
foldl (\x y -> x*2 + y*2) 0 [1,2,3] = 22
foldr (\x y -> x*2 + y*2) 0 [1,2,3] = 34
foldl (\x y -> x*2 + y*2) 0 [1,2,3] ⇒ f(f(f(0,1),2),3)
foldr (\x y -> x*2 + y*2) 0 [1,2,3] ⇒ f(3,f(2, f(1,0)))
其中f = \x y -> x*2 + y*2
。
我明白foldl
結果:
x = f(0,1) = 2
y = f(x,2) = 8
z = f(y,3) = 22
但是爲什麼每一步的結果後foldr
總和?
2 + 8 + 22 = 34
如果你試圖讓平方和,然後你想:'與foldl」(\ XY - > X + Y^2)0' –
還要注意,通常建議始終使用的嚴格的版本'foldl' - 'foldl',因爲它不會導致內存泄漏。 – Mark
@Mark感謝您的正確編輯 –