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

use*_*478 2 ocaml multidimensional-array map-function

let lst = [[1;2;3];[4;5;6]];;
Run Code Online (Sandbox Code Playgroud)

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

lst = [[1;4;9];[16;25;36]];;
Run Code Online (Sandbox Code Playgroud)

Sim*_*ine 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)
Run Code Online (Sandbox Code Playgroud)

然后写成square : int list list -> int list list:

let square = mapmap (fun x -> x*x)
Run Code Online (Sandbox Code Playgroud)