【问题标题】:foldl operation in SMLSML 中的 foldl 操作
【发布时间】:2013-01-17 19:24:40
【问题描述】:

我执行以下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)。

【问题讨论】:

    标签: functional-programming sml smlnj fold ml


    【解决方案1】:

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

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

    here

    【讨论】:

      【解决方案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 只有在达到 [] 时才开始返回一个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 2012-04-01
        • 2013-12-17
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        相关资源
        最近更新 更多