我试图了解人们如何在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
是什么?我认为它是某种地图,但我无法弄清楚它是什么。
由于
答案 0 :(得分:4)
为了扩展rgrinberg的答案:在OCaml中,类型构造函数在它们的参数之后。所以你有int list
,这是一个整数列表。这里有一个类型构造函数CharMap.t
,用于构造键类型为char
的映射。因此int CharMap.t
将是从char
到int
的地图。 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 ;;