在SML中的foldl操作

时间:2013-02-02 16:30:52

标签: 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)。

2 个答案:

答案 0 :(得分:3)

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

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

请参阅here

答案 1 :(得分: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只有在达到[]后才开始返回一个值。