次のfoldl
操作を行います
foldl (fn (acc,y) => if acc>y then acc else y+1) 0 [1,3]
だから、私はこれが私に結果を生み出すことを期待しています4
が、それはの出力を生み出します3
。私は何が欠けていますか?
私のトレースは次のようなものです。
acc: 0 y: 1
acc: 2 y: 3
また、acc> y、つまり2> 3なので、elseブランチに入り、4(3 + 1)を返す必要があります。
次のfoldl
操作を行います
foldl (fn (acc,y) => if acc>y then acc else y+1) 0 [1,3]
だから、私はこれが私に結果を生み出すことを期待しています4
が、それはの出力を生み出します3
。私は何が欠けていますか?
私のトレースは次のようなものです。
acc: 0 y: 1
acc: 2 y: 3
また、acc> y、つまり2> 3なので、elseブランチに入り、4(3 + 1)を返す必要があります。
アキュムレータは、foldl
の最初のパラメータの2番目のパラメータです。だからこれを試してみてください:
foldl (fn (y,acc) => if acc>y then acc else y+1) 0 [1,3]
こちらをご覧ください
プログレッション:
fn(0,1) => not(0>1) = 1+1 = 2: new acc
fn(3,2) => is(3>2) = 3: new acc
fn([],3) => 3: final answer
foldlはすぐに新しい値を計算し、foldrは[]に達したときにのみ値を返し始めます。