0

次の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)を返す必要があります。

4

2 に答える 2

3

アキュムレータは、foldlの最初のパラメータの2番目のパラメータです。だからこれを試してみてください:

foldl (fn (y,acc) => if acc>y then acc else y+1) 0 [1,3]

こちらをご覧ください

于 2013-02-02T16:34:20.273 に答える
2

プログレッション:

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は[]に達したときにのみ値を返し始めます。

于 2013-02-04T15:24:52.293 に答える