在2d列表中使用map功能?

时间:2016-04-18 17:00:33

标签: multidimensional-array ocaml map-function

let lst = [[1;2;3];[4;5;6]];;

如何在OCaml中使用2D数组中的map函数(列表是不可变的),这样我就可以对每个元素进行求解并得到: -

lst = [[1;4;9];[16;25;36]];;

2 个答案:

答案 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]]