2013-04-04 76 views
3

我打算在Ocaml中使用Map来练习。如何使用Map /定义一个实际上是OCaml中的Map的类型?

我发现Map的用法是从ListArray完全不同,等

我的理解是运用functor,我还没有学会。但没关系。


这里是我的IntMap

module IntMap = Map.Make(struct type t = int let compare = compare end)

所以,现在我可以IntMap.add x y map使用IntMapadd等,对不对?


我有几个问题:

  1. 如何控制valuemap类型?
  2. 如果我想要我的IntMap的别名类型,我该怎么办?我可以做type 'a my_type = 'a list,但map怎么办?
  3. 我发现IntMap就像List,他们两个实际上都是modules。但List有一种类型list,那么map呢?

回答

3

问:

如何控制值在地图类型?

您不需要,'a IntMap.t是一个参数化类型,其中包含'a类型的值。因此,单个模块IntMap可用于从整数到整数,从整数到布尔,整数到函数...(当然,单个映射值只能包含单个类型的绑定)。此外,没有理由试图限制IntMap.empty的类型,就像没有理由强制[]是除'a list以外的任何类型。

问:

如果我想有一个别名类型我IntMap,我该怎么办?我可以输入'a my_type ='列表,但如何处理地图?

这样:

type 'a imap = 'a IntMap.t 

问:

我发现IntMap就像列表和他们两个其实都是模块。但List有一个列表类型,那么地图呢?

这是Intmap.t

+0

我在doc中看到'type +'a t类型键到类型'a'的映射类型,里面的'+'的含义是什么? – 2013-04-04 16:25:37

+0

@JacksonTale看到这个问题:[为什么在此类型之前有一个加号?](http://stackoverflow.com/questions/15305499/why-there-is-a-plus-sign-before-this-type/ ) – gasche 2013-04-04 21:46:52

相关问题