假设我有一个(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
(*这是我所知道的唯一一个地图函数*)
答案 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);;