8
foldl
については、HaskellとErlangの違いがあることに気付きました。 foldr
についてはハスケル対erlang:foldlの違いは?
、両方の言語が同じ結果を返す:
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 :: Foldable t =>(b - > a - > b) - > b - > ta - > bとfoldr :: Foldable t =>(a→b→b)→b→ta→bとなる。 – Dogbert
'2 * x + y'対' X + 2 * Y' - これは意図したものですか? – chi
@chi非常に注意深く、私はこれら2つを混ぜ合わせました!しかし、問題はまだ残っていますが、まったく別の方法です。foldrは同じように動作しますが、foldlは別の番号を返します。 –