【问题标题】:How does this function concatenate work with first order functions?这个函数连接如何与一阶函数一起工作?
【发布时间】:2015-09-26 20:01:38
【问题描述】:
let concat (l : string list) : string = fold_right (fun a x -> a ^ x) l ""

所以要通过它,我看到了

  • 让 concat 获取一个包含字符串的列表,并返回一个字符串。
  • 右折叠需要3个参数,
    • 1 第一个是连接两个字符串的函数,它接受 a 和 x,然后使用 ^ 连接它们。
    • 2第二个参数是列表,
    • 3,最后第三个是累加器,将每次传递都添加到其中。

但是,func a x 怎么知道 a 是列表的第一个元素,而 x 是第二个。

而当它再次通过时,它怎么知道a是列表的第三个元素,x是第四个元素,以此类推?

【问题讨论】:

    标签: list functional-programming ocaml higher-order-functions


    【解决方案1】:

    accumulatorfold function 的第一个参数ax 是列表的set to each elementfold 依次经过它。

    fold function 的返回值是accumulatornew value

    accumulator 的初始值是empty string,因此第一个连接的结果,即new accumulator,与列表的first element 的值相同。

    然后将next element 连接到该位置,以此类推,直到到达列表末尾,此时fold 返回完全连接的字符串final value of the accumulator

    【讨论】:

    • 只是一个小评论:对于List.fold_right,累加器是折叠函数的第二个参数。对于^,这并不重要。对于List.fold_left,累加器是第一个参数。
    猜你喜欢
    • 2017-09-19
    • 2022-06-18
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2020-09-25
    • 2019-11-21
    相关资源
    最近更新 更多