如何使用List.map在int列表列表中应用函数?

时间:2014-10-30 04:52:33

标签: list map ocaml

假设我有一个(int list list) x = [[1;1;1]; [2;2;2]; [3;4;5]]和一个函数f。结果应为[f [1;1;1]; f [2;2;2]; f[3;4;5]].内置的List.map仅适用于int列表但不适用于int列表列表。此新列中的第i个条目由函数f计算,函数f将i作为输入。电子表格中每列的元素,并形成一个新元素。

let newList x f = List.map f x(*这是我所知道的唯一一个地图函数*)

1 个答案:

答案 0 :(得分:2)

您可以将List.map f用作函数,该函数适用于一维列表,然后使用map在二维列表上运行,如下所示:

let x = [[1;1;1]; [2;2;2]; [3;4;5]];; 
let f x = x + 1;; 
List.map (List.map f) x;;

输出:

- : int list list = [[2; 2; 2]; [3; 3; 3]; [4; 5; 6]]
  

我的函数将输入两个参数,一个int列表和一个   功能它将输出一个新的int列表。输入= m = [[x1; x2; x3];   [y1; y2; y3]; [z1; z2; z3]]和函数f输出= [f [x1; y1; z1]; F   [x2; y2; z2]; f [x3; y3; z3]]

您似乎希望转置(https://stackoverflow.com/a/3989823/4196578)二维数组,然后映射f。在这种情况下,你可以这样做:

let rec transpose list = match list with
| []             -> []
| []   :: xss    -> transpose xss
| (x::xs) :: xss ->
    (x :: List.map List.hd xss) :: transpose (xs :: List.map List.tl xss);;

let myfunc m f = List.map f (transpose m);;