Ich habe bemerkt, dass es einen Unterschied zwischen Haskell und Erlang gibt, wenn es um foldl
geht.Haskell vs. Erlang: Unterschied in Foldl?
Für foldr
, kehren beide Sprachen die gleichen Ergebnisse:
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
Aber die Rückgabewerte für foldl
sind unterschiedlich:
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
Wie kann dieser Unterschied zu erklären?
Die Reihenfolge der Argumente zum ersten Argument von 'foldl' und' foldr' scheint in Haskell anders zu sein: 'faltl :: Faltbares t => (b -> a -> b) -> b -> ta - > b' und 'foldr :: Faltbares t => (a -> b -> b) -> b -> ta -> b'. – Dogbert
'2 * x + y' vs' X + 2 * Y' - ist das beabsichtigt? – chi
@chi Sehr aufmerksam, es stellt sich heraus, ich habe diese beiden gemischt! Das Problem besteht jedoch immer noch, außer dass es jetzt genau umgekehrt ist. 'Foldr' verhält sich genauso, aber' foldl' gibt eine andere Zahl zurück. –