该函数如何与一阶函数连接起作用?

时间:2015-09-26 20:01:38

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

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是第四个,依此类推?

1 个答案:

答案 0 :(得分:1)

accumulatora的第一个参数fold functionx依次列为set to each element fold {{1}走过去。

fold function的返回值是new value的{​​{1}}。

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

然后将first element连接到那个,依此类推,直到到达列表的末尾,此时next element返回fold,即完全连接的字符串。