OCaml - 函数调用列表中的每个元素

时间:2015-10-24 23:18:47

标签: recursion functional-programming ocaml

仅使用递归(即没有任何类型的循环),给定一个元素列表,每次在OCaml中如何使用该元素作为参数,每次为列表的每个元素调用一个函数?折叠和贴图不起作用,因为虽然它们将函数应用于每个元素,但它返回一个我在每个元素上调用的函数的列表,这不是我想要的。

为了更好地说明我在OCaml中要做的事情,这里是我想要的Ruby代码的想法:

arr.each {|x| some_function x}

但我必须只使用递归而不使用iter函数

2 个答案:

答案 0 :(得分:3)

正确的递归函数描述为:

  • 如果列表为空,则不执行任何操作;
  • else,处理第一个元素,然后处理列表的尾部。

相应的代码是:

let rec do_all f lst =
match lst with
| [] -> ()
| x :: xs -> f x; do_all f xs

答案 1 :(得分:0)

递归函数的一个相当通用的模板是:

let rec f x =
    if x is trival to handle then
        handle x
    else
        let (part, rest) = division of x into smaller parts in
        let part_result = handle_part part in
        let recursive_result = f rest in
        combine part_result recursive_result

由于您不需要结果,因此可以跳过很多内容。

此模板的哪些部分似乎最难解决您的问题?

<强>更新

(正如@EduardoLeón所指出的,当使用列表时,您可以测试一个简单的列表使用模式匹配将列表分解为更小的部分。模式匹配很酷。)

更新2

我的问题是真诚的。哪个部分有问题?否则我们不知道该建议什么。