List.map List.map的类型是什么

时间:2014-11-20 08:28:58

标签: functional-programming ocaml

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>

提前致谢

2 个答案:

答案 0 :(得分:2)

以下是一个例子:

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列表的每个元素上操作开头列出的每个简单函数。

......但是多么奇怪的功能!

答案 1 :(得分:1)

这是您可以确定类型的另一种方式: 假设地图是类型(haskell表示法)

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

你可以通过替换类型变量来追捕结果。在地图map2的情况下,可以进行替换:a与(c - > d)统一,并且b与剩余的[c] - &gt;统一。并[d]。 在地图类型中替换这些变量(并蚀刻掉map的第一个参数(即map2))会得到以下类型:

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