Стандартное бинарное дерево ML - PullRequest
2 голосов
/ 05 ноября 2010

У меня все еще есть проблемы с этим, поэтому я могу попросить о дополнительной помощи.

Нам дают:

datatype which = STRING of string | INT of int

Часть 1. Нам говорят, что нам нужно создать еще однутип данных namedTree для двоичного дерева, содержащего значения типа «which», где данные находятся только на листьях дерева.

Я предположил, что это будет правильный ответ:

datatype whichTree = Empty | Leaf of which | Node of whichTree*whichTree;

Оказывается, это не так, когда я запускаю:

val inttree = Node(Leaf(1), Leaf(2));

Я получаю ошибку.

Мне удалось выяснить, что я могу сделать что-то вроде этого:

datatype 'a whichTree = Empty | Leaf of 'a | Node of 'a whichTree * 'a whichTree;

или

datatype whichTree = Empty | Leaf of int | Node of whichTree*whichTree;

Но ни один из них не кажется мне правильным, поскольку в моем первом случае у моего имени типа данных есть буква 'a, а в моем другом я говорю Leaf of int, когда долженбыть в состоянии указать string или int с помощью которого.

Может кто-нибудь сказать мне, что правильно ответить на него или предоставить мне некоторую помощь?

1 Ответ

4 голосов
/ 05 ноября 2010

Ваше определение whichTree правильное, вы просто упускаете конструктор для which в вашем inttree:

val inttree = Node(Leaf(INT 1), Leaf(INT 2))
...