2013-03-07 96 views
2

我想了解人們如何在OCaml中編寫trie。還有就是我在網上找到了一個例子:無法理解OCaml trie類型聲明

它定義了一個地圖:

module CharMap = Map.Make(Char) 

然後定義線索的類型:

(* 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?我認爲它是某種地圖,但我無法弄清楚它是什麼。

感謝

回答

4

爲了擴大rgrinberg的答案:在OCaml中,類型構造函數遵循它們的參數。所以你有int list,這是一個整數列表。這裏有一個類型構造函數CharMap.t,它構造了鍵的類型爲char的映射。所以int CharMap.t將是從char s到int s的地圖。 trie CharMap.t的含義是完全類似的,除了可能的事實(如rgrinberg指出的那樣),這是trie類型的遞歸使用。它類似於樹的定義,因爲樹中節點中包含的東西本身就是樹。這裏所包含的內容是他們自己的嘗試。

+0

thx,這對我來說很有意義 – 2013-03-07 23:15:50

2

從你的片段,我猜trie CharMap.t是一個地圖,鍵字和值是trie型這是遞歸定義的。

1

trie CharMap.t是從Char到trie數據類型的映射類型。 這使用參數類型。例如,

type'param paired_with_int = int *'param ;;

然後可以使指定類型如下:

類型specific_pair =浮子paired_with_int ;;