2015-11-04 2 views
3

Я хочу объявить тип варианта в OCamlВариант записи в OCaml

type 'a tree = Node of 'a tree * 'a * 'a tree * int | Null 

Но есть много свойств здесь, так что я хотел бы назвать их, поэтому я попытался использовать запись здесь:

type 'a tree = Node of { left: 'a tree; value: 'a; right:'a tree; height: int | Null 

Но это вызывает синтаксическую ошибку.

Использование что-то запись, как позволит мне использовать хороший синтаксис

match x with 
| Node of a -> a.value 
| Null -> 0 

Как я должен объявить его, чтобы не получить синтаксические ошибки?

+4

Эта конструкция должна быть доступна в следующей версии OCaml, см http://caml.inria.fr/ богомол/view.php? ID = 5528 – PatJ

ответ

5

Вы могли бы объявить два взаимно рекурсивных типов, один для узлов и один для деревьев:

# type 'a node = { left: 'a tree; value: 'a; right:'a tree; height: int } 
    and 'a tree = Node of 'a node | Null 
    ;; 
type 'a node = { left : 'a tree; value : 'a; right : 'a tree; height : int; } and 'a tree = Node of 'a node | Null;; 

# match Node({left = Null; value = 1; right = Null; height = 0}) with 
    | Node(n) -> n.value 
    | Null -> 0 
    ;; 
- : int = 1 
Смежные вопросы