【问题标题】:Erlang: Foldl function parameters swappedErlang:交换了Foldl函数参数
【发布时间】:2017-08-13 04:50:25
【问题描述】:

为什么累加器 AccIn 不是 Fun 的左参数? http://erlang.org/doc/man/lists.html#foldl-3

foldl(Fun, Acc0, List) -> Acc1


Fun = fun((Elem :: T, AccIn) -> AccOut)
Acc0 = Acc1 = AccIn = AccOut = term()
List = [T]
T = term()

我问这个是因为几乎所有其他函数式语言(例如haskellscala)都反过来。您的意思是将左侧折叠可视化为从左侧累积为

foldl f z [x1, x2, ..] = ((z f x1) f x2) ..

【问题讨论】:

    标签: erlang foldleft


    【解决方案1】:

    和 Haskell 中的一样:

    foldl(Fun, Acc0, List) -> Acc1

    foldl :: (a -> b -> a) -> a -> [b] -> a

    【讨论】:

    • 没有。我认为您错过了 erlang 的 foldl 规范。尝试将其与 haskell 版本进行比较。
    • 你复制的是haskell规范。 (a -> b -> a) 具有与累加器相同的类型 a。现在将它与更像(b -> a -> a) 的erlang 进行比较,您就会明白我在说什么。
    【解决方案2】:

    不同版本折叠之间的参数顺序的一致性被认为比您提到的任何此类代数可视化更重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2012-06-09
      • 2012-03-03
      相关资源
      最近更新 更多