Functional programming SML中的foldl操作

Functional programming SML中的foldl操作,functional-programming,sml,smlnj,fold,ml,Functional Programming,Sml,Smlnj,Fold,Ml,我执行以下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 (y,acc) => if acc>y th

我执行以下
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 (y,acc) => if acc>y then acc else y+1) 0 [1,3]

请参见

累加器是
foldl
的第一个参数的第二个参数。所以试试这个:

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仅在值达到[]时才开始返回值。

Progression:

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仅在值达到[]时才开始返回值