let lst = [[1;2;3];[4;5;6]];;
如何在OCaml中使用2D数组中的map函数(列表是不可变的),这样我就可以对每个元素进行求解并得到: -
lst = [[1;4;9];[16;25;36]];;
答案 0 :(得分:5)
您可以使用mapmap : ('a -> 'b) -> 'a list list -> 'b list list
两次编写一个与常规map : ('a -> 'b) -> 'a list -> 'b list
类似的map
:
(* Apply 'List.map f' to each xs in xss *)
let mapmap f xss = List.map (fun xs -> List.map f xs) xss
(* Written a bit shorter *)
let mapmap f = List.map (List.map f)
然后写square : int list list -> int list list
成为:
let square = mapmap (fun x -> x*x)
答案 1 :(得分:0)
如果您将其用于简单列表,请执行
# List.map (fun x -> x + 1) [1;2;3;4];;
- : int list = [2; 3; 4; 5]
这里是列表清单:
let square ll = List.map (fun x->(List.map (fun inner -> inner*inner)x))ll ;;
example:
# let x = [[1;2;3];[10;11;12]];;
val x : int list list = [[1; 2; 3]; [10; 11; 12]]
你的功能,以平衡你的元素:
let square ll = List.map (fun x->(List.map (fun inner -> inner*inner)x))ll
;;
val square : int list list -> int list list = <fun>
结果:
square x;;
- : int list list = [[1; 4; 9]; [100; 121; 144]]