Что ж, меня просят сделать следующее:
Чтобы определить двоичное дерево, которое может содержать 2 различных типа: ('a,' b) abtree, и это требования:
- Любая внутренняя вершина (не лист) должна иметь тип 'a или' b, и у листьев нет значения.
Для каждого пути в дереве все значения должныпоявляются перед значением 'b: примеры путей:
'a->'a->'a-'b (legal)
'a->'b->'b (legal)
'a->'a->'a (legal)
'b->'b->'b (legal)
'a->'b->'a (ILLEGAL)
, а также мне нужно определить другое дерево, подобное описанному выше, но теперь у меня есть также' c иво втором требовании говорится, что для каждого пути I 'значения появляются перед значениями' b, а все значения 'b отображаются перед значениями' c.
Во-первых, я не уверен, как определить двоичные деревьяиметь более 1 типа в них.Я имею в виду простейшее двоичное дерево:
datatype 'a tree =
leaf
| br of 'a * 'a tree * 'a tree;
И также, как я могу определить дерево, чтобы иметь эти требования.
Любая помощь будет оценена.
Спасибо.
ОК, спасибо большое.Итак, вы имеете в виду что-то вроде этого:
datatype 'b bTree =
leaf
| bBranch of 'b * 'b bTree * 'b bTree
;
datatype ('a,'b) abTree =
leaf
| aBranch of 'a * ('a, 'b) abTree * ('a,'b) abTree
| bBranch of 'b * 'b bTree * 'b bTree
;
, и это то, что я сделал для случая, когда это дерево 3 типов, как я упоминал выше:
datatype 'c cTree =
leaf
| cBranch of 'c * 'c cTree * 'c cTree
;
datatype ('b, 'c) bcTree =
leaf
| bBranch of 'b * ('b, 'c) bcTree * ('b,'c) bcTree
| cBranch of 'c * 'c cTree * 'c cTree
;
datatype ('a, 'b, 'c) abcTree =
leaf
| aBranch of 'a * ('a, 'b, 'c) abcTree * ('a, 'b, 'c) abcTree
| bBranch of 'b * ('b, 'c) bcTree * ('b, 'c) bcTree
| cBranch of 'c * 'c cTree * 'c cTree
;
Я прав?
Кроме того, что означает требование листьев?Тот, который говорит, что листья не должны иметь значения?