我正在使用Ocaml的内置Map库来处理问题集,而我无法访问地图本身的数据类型。这应该是字典的第三个实现(前两个是列表和不平衡的二叉搜索树),我必须实现的部分函数是“type dict”,它是实际字典的数据类型。对于列表,键入dict是(D.key * D.value)列表;对于树,类型dict是Empty |分支((D.key * D.value),dict,dict)。 Ocaml文档说:
type +'a t
The type of maps from type key to type 'a.
这看起来像我需要的,但我似乎无法正确使用它。顺便说一句,M是我的Map.Make模块。我试过了
type dict = M.t
type dict = M.+D.value t
type dict = M.+
但我不断收到错误消息。有人可以帮忙吗?非常感谢!
答案 0 :(得分:7)
+
是方差注释,它不是名称的一部分。参数化类型的语法是OCaml中的param type
或(param, param, ...) type
:int list
,(int, string) Hashbl.t
。你想要的是D.value M.t
。
答案 1 :(得分:4)
您可以通过询问ocaml编译器找出自己:ocamlc -i file.ml
要通过标准ocaml库中的Map.Make创建地图,此文件将如下所示(对于从int到'a的地图):
module Intmap = Map.Make (struct
type t = int
let compare = Pervasives.compare
end)
ocaml编译器会给你这样的东西(当调用ocamlc -i mymap.ml
时):
module Intmap :
sig
type key = int
type +'a t
val empty : 'a t
...
end