无法理解OCaml trie类型声明

时间:2013-03-07 22:45:32

标签: types ocaml

我试图了解人们如何在OCaml中编写trie。我在网上找到了一个例子:

它定义了一个地图:

module CharMap = Map.Make(Char)

然后它定义了trie的类型:

(* count of members of the set that end at this node * mapping from
     next char => children *)
type trie = Node of int * trie CharMap.t

这是我的问题:trie CharMap.t是什么?我认为它是某种地图,但我无法弄清楚它是什么。

由于

3 个答案:

答案 0 :(得分:4)

为了扩展rgrinberg的答案:在OCaml中,类型构造函数在它们的参数之后。所以你有int list,这是一个整数列表。这里有一个类型构造函数CharMap.t,用于构造键类型为char的映射。因此int CharMap.t将是从charint的地图。 trie CharMap.t的含义是完全类似的,除了(正如rgrinberg指出的)这可能是trie类型的递归使用。它类似于树的定义,因为树的节点中包含的东西本身就是树。在这里,trie中包含的东西本身就是尝试。

答案 1 :(得分:2)

在你的代码片段中,我猜trie CharMap.t是一个地图,其中键是字符,值是trie类型,是递归定义的。

答案 2 :(得分:1)

trie CharMap.t是从Char到trie数据类型的地图类型。 这使用参数类型。例如,

键入' param paired_with_int = int *' param ;;

然后您可以按如下方式创建指定的类型:

type specific_pair = float paired_with_int ;;