列表.地图的类型是什么 列表.地图



函数List.map有这样的类型:

# List.map;;
- : ('a -> 'b) -> 'a list -> 'b list = <fun>

并且可以以这种简单的方式使用它:

# List.map square [1;2;3;4];;
- : int list = [1; 4; 9; 16]

我的问题是:

这个函数的类型是什么,使用示例是什么?

# let superMap = List.map List.map;;
val superMap : ('_a -> '_b) list -> ('_a list -> '_b list) list = <fun>

提前致谢

下面是一个例子:

let f_list =  (List.map List.map) [(fun x -> x+1);(fun x -> 2*x)];;
val f_list : (int list -> int list) list = [<fun>; <fun>]

所以它接受一个函数列表作为输入,并返回一个对列表进行操作的函数列表。

List.map (fun f -> f [1;2;3]) f_list;;
- : int list list = [[2; 3; 4]; [2; 4; 6]]

所以它做了什么 :它在 int 列表中的每个元素上运行开头列出的每个简单函数。

。但是多么奇怪的功能!

这是确定类型的另一种方法:假设地图的类型(哈斯克尔表示法)

map  :: (a -> b) -> [a] -> [b]
map2 :: (c -> d) -> [c] -> [d]

您可以通过替换类型变量来查找结果。在 map map2 的情况下,可以进行替换:a 与 (c -> d) 统一,b 与剩余的 [c] -> [d] 统一。将这些变量替换为 map 的类型(并蚀刻 map 的第一个参数(即 map2))得到以下类型:

map map2 :: [c -> d] -> [[c] -> [d]]

最新更新