2017-07-17 133 views
3

我試圖創建一個表示空的二叉樹(基本上,只有它的骨架)的類型。然後這個類型的變量將被用模式匹配來迭代。OCaml中的空樹類型

我知道如何從標準類型(int,string等)的多態變體中實例化一個固定 - 請參見下面的int_tree。但是,目前尚不清楚是否可以從多態一個空的變體(empty_tree下面的行在編譯過程中失敗並伴隨SyntaxError)。

的代碼如下:

type 'a binary_tree =                             
    | Leaf of 'a                              
    | Node of 'a binary_tree * 'a * 'a binary_tree                      

type int_tree = int binary_tree;;                          

type empty_tree =() binary_tree;; 

回答

5

()不是一個類型,但它的類型unit的唯一價值。

寫作() binary_tree就像寫作0 binary_tree(而不是int binary_tree)。

你的空樹應該是unit binary_tree

+0

雖然那棵樹不會是空的,但包含單元類型的值,其中只有一個。 –

+0

確實,真正空樹需要改變數據結構。 – nefas

+0

'type +'a tree = Leaf | 'binary_tree *'的節點a *'binary_tree' –