我将在Ocaml中使用Map
进行练习。
我发现Map
的使用情况与List
,Array
等完全不同。
我知道它正在应用我尚未学习的functor
。但没关系。
这是我的IntMap
module IntMap = Map.Make(struct type t = int let compare = compare end)
所以,现在我可以IntMap
使用add
到IntMap.add x y map
等,对吗?
我有几个问题:
value
中map
的类型? IntMap
的别名类型,我该怎么办?我可以type 'a my_type = 'a list
,但map
怎么做?IntMap
与List
类似,而且它们都是modules
。但List
的类型为list
,map
答案 0 :(得分:3)
问:
如何控制地图中的值类型?
您没有(需要),'a IntMap.t
是一个参数化类型,其中包含'a
类型的值。因此,单个模块IntMap
可用于从int到int,从int到bool,int到函数的映射......(当然,单个映射值只能包含单个类型的绑定)。此外,没有理由试图约束IntMap.empty
的类型,就像没有理由强迫[]
为'a list
以外的任何类型。
问:
如果我想为我的IntMap使用别名类型,我该怎么办?我可以输入'a my_type ='列表,但是如何为地图输入?
这样:
type 'a imap = 'a IntMap.t
问:
我发现IntMap就像List一样,它们都是模块。但是List有一种列表,那么地图呢?
这是Intmap.t
。