Module 类型+';Ocaml地图库中的t?
我正在使用Ocaml的内置地图库来解决一个问题集,但是我在访问地图本身的数据类型时遇到了问题。这应该是字典的第三个实现(前两个是列表和非平衡二叉搜索树),我必须实现的函子的一部分是“type dict”,它是实际字典的数据类型。对于list,dict类型为(D.key*D.value)list;对于树,dict类型为空| Branch((D.key*D.value),dict,dict)。Ocaml文档说明:Module 类型+';Ocaml地图库中的t?,module,map,types,ocaml,Module,Map,Types,Ocaml,我正在使用Ocaml的内置地图库来解决一个问题集,但是我在访问地图本身的数据类型时遇到了问题。这应该是字典的第三个实现(前两个是列表和非平衡二叉搜索树),我必须实现的函子的一部分是“type dict”,它是实际字典的数据类型。对于list,dict类型为(D.key*D.value)list;对于树,dict类型为空| Branch((D.key*D.value),dict,dict)。Ocaml文档说明: type +'a t The type of maps from type key
type +'a t
The type of maps from type key to type 'a.
这似乎是我需要的,但我似乎不能正确使用它。M是我的地图。顺便说一下,制作模块。我试过了
type dict = M.t
type dict = M.+D.value t
type dict = M.+
但我一直收到错误信息。有人能帮忙吗?非常感谢
+
是方差注释,它不是名称的一部分。参数化类型的语法是OCaml中的param type
或(param,param,…)type
:int list
,(int,string)Hashbl.t
。这里需要的是D.value M.t
您可以通过询问ocaml编译器来了解自己:ocamlc-i file.ml
要通过标准ocaml库中的map.Make创建映射,此文件将如下所示(对于从int到“a”的映射):
ocaml编译器将提供如下内容(当调用ocamlc-imymap.ml
时):
“+”怎么不是一个语法结构?”每个类型参数的前缀可以是方差约束+(resp.-),表示参数是协变的(resp.逆变)。“from。它允许/不允许在变量和对象系统中使用子类型。当然,我的措辞是错误的。当然,几乎所有的东西都是“句法结构”,我编辑了我的答案。非常感谢!D.value M.t工作!非常感谢你的帮助。
module Intmap = Map.Make (struct
type t = int
let compare = Pervasives.compare
end)
module Intmap :
sig
type key = int
type +'a t
val empty : 'a t
...
end