ocaml使用List.map迭代列表

时间:2010-06-19 00:12:15

标签: list ocaml

有没有办法通过List.map在列表上迭代列表?

我知道List.map采用单个函数并列出并生成一个函数适用于所有元素的列表。但是如果我有一个应用列表并生成列表列表的函数列表呢?

3 个答案:

答案 0 :(得分:6)

你的问题不是很清楚,但据我所知,你有一个功能列表和一个值列表。如果要将所有函数应用于所有元素,则可以写下:

(* // To get one nested list (of results of all functions) for each element *)
List.map (fun element ->
  List.map (fun f -> f element) functions) inputs

(* // To get one nested list (of results for all elements) for each function *)
List.map (fun f ->
  List.map (fun element -> f element) inputs) functions

如果这不是您想要的,您是否可以尝试澄清一下这个问题(也许一些具体的例子会有所帮助)?

答案 1 :(得分:0)

你可以试试这个:

let rec fmap fct_list list = match fct_list with
    [] -> //you do nothing or raise sth
    head::tail -> List.map head list :: fmap tail list;;

答案 2 :(得分:0)

您是否可以使用List.map2?因为这很简单:

let lista = [(fun x -> x + 1); (fun x -> x + 2); (fun x -> x + 3)];;
let listb = [1; 1; 1];;
let listc = List.map2 (fun a b -> (a b)) lista listb;;

输出为[2; 3; 4]

编辑:等等,我想我读错了你的问题。您想获得列表列表,其中每个列表包含应用于初始列表的函数列表?换句话说,对于上面的lista和listb,你会得到:

[[2;2;2];[3;3;3];[4;4;4]]

这是对的吗?