2017-07-17 94 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' –