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的第一个参数的第二个参数。所以试试这个:

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 回答