如何使用List.map在int List上应用函数?
假设我有一个如何使用List.map在int List上应用函数?,list,map,ocaml,List,Map,Ocaml,假设我有一个(int list)x=[[1;1;1];[2;2];[3;4;5]和一个函数f。结果应该是[f[1;1;1];f[2;2];f[3;4;5]。内置的List.map仅适用于int List,而不适用于int List List。此新列中的第i个条目由函数f计算,该函数将电子表格中每列的第i个元素作为输入,并形成一个新元素 让newList x f=List.map f x(*这是我所知道的唯一一个map函数*)您可以使用List.map f作为一个函数,它在一维列表上工作,然后在二
(int list)x=[[1;1;1];[2;2];[3;4;5]
和一个函数f。结果应该是[f[1;1;1];f[2;2];f[3;4;5]。
内置的List.map仅适用于int List,而不适用于int List List。此新列中的第i个条目由函数f计算,该函数将电子表格中每列的第i个元素作为输入,并形成一个新元素
让newList x f=List.map f x
(*这是我所知道的唯一一个map函数*)您可以使用List.map f
作为一个函数,它在一维列表上工作,然后在二维列表上使用该函数,如下所示:
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 list和一个
函数f。它将输出一个新的int列表。输入=m=[[x1;x2;x3];
[y1;y2;y3];[z1;z2;z3]]和函数f输出=[f[x1;y1;z1];f
[x2;y2;z2];f[x3;y3;z3]]
似乎您想将()转换为二维数组,然后映射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);;
谢谢你的帮助。当对初始int列表中所有列的所有I-th元素调用f时,如何创建一个新列,其中新列的I-th元素将成为结果。对于新列的第三个元素,我们调用[1;2;5]上的函数f。因此,新专栏的完整结果将是[f[1;2;3];f[1;2;4];f[1;2;5]。我不确定你的确切意思。
f
的确切定义是什么?在你最初的问题f是:int->int
,现在f
是另一种类型吗?假设我得到一个int列表m=[[x1;x2;x3];[y1;y2;y3];[z1;z2;z3]]。我如何创建一个新的整数列表m'=[x1;y1;z1];[x2;y2;z2];[x3;y3;z3];然后使用list.map应用函数f来获得结果=[f[x1;y1;z1];f[x2;y2;z2];f[x3;y3;z3]?那么f
的输入类型和输出类型是什么?如果f2
将整数列表作为输入,您只需执行以下操作:List.map f2 x代码>