Рекурсивные типы в OCaml? - PullRequest
       28

Рекурсивные типы в OCaml?

5 голосов
/ 22 января 2011

Привет, это моя первая публикация о переполнении стека, и я столкнулся с проблемой при попытке создать тип в OCaml

Я пытаюсь построить дерево типов, которое имеет узлы / листья / и т.д. Это то, что я имею до сих пор.

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree) | ....

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

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree ('a*'b))

и я все еще получаю ошибку. Что-нибудь, что вы заметили, я делал неправильно? Спасибо!

1 Ответ

9 голосов
/ 23 января 2011
type ('a, 'b) tree = Empty | Leaf of 'b | Node of 'a * ('a, 'b) tree

Вы, вероятно, хотите, чтобы два узла имели более одного дочернего элемента, хотя

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a, 'b) tree * 'a * ('a, 'b) tree

PS: Осторожно, чем в объявлении типа, Foo of bar * baz и Foo of (bar * baz) не совпадают:первый - конструктор Foo с двумя полями, второй - только одно поле типа (bar * baz).

...