Я пытаюсь создать пару взаимно-рекурсивных типов данных, чтобы представить красно-черное дерево в OCaml для задания домашней работы. Тем не менее, я очень незнакома с языком OCaml, поэтому у меня возникают синтаксические проблемы.Взаимно рекурсивные типы данных
Вот что я придумал до сих пор:
type 'a red_black_tree =
| RedNode of 'a * ('a black_node * 'a black_node)
| BlackNode of 'a black_node
and 'a black_node =
| TwoRedNodes of 'a * ('a RedNode * 'a RedNode)
| TwoBlackNodes of 'a * ('a black_node * 'a black_node)
| BlackLeaf;;
Когда я вход это в OCaml это дает мне:
utop # type 'a red_black_tree =
| RedNode of 'a * ('a black_node * 'a black_node)
| BlackNode of 'a black_node
and 'a black_node =
| TwoRedNodes of 'a * ('a RedNode * 'a RedNode)
| TwoBlackNodes of 'a * ('a black_node * 'a black_node)
| BlackLeaf;;
Error: Syntax error
не Способны ли вы ссылаться на значение к югу от типа из подтипа? Не ищите фактического ответа на проблему, просто объясняя синтаксис.
UPDATE
Я это после первой попытки, но об этом заявил профессор, что это не было пара взаимно рекурсивных типов данных:
type 'a red_black_tree =
| RedNode of 'a red_node
| BlackNode of 'a black_node
and 'a red_node =
| RedTree of 'a * ('a black_node * 'a black_node)
and 'a black_node =
| TwoRedNodes of 'a * ('a red_node * 'a red_node)
| TwoBlackNodes of 'a * ('a black_node * 'a black_node)
| BlackLeaf;;
UPDATE 2
Задача 3 Красно-черное дерево - это своего рода дерево, которое иногда используется для организации числовых данных. Он имеет два типа узлов, черные узлы и красные узлы. У красных узлов всегда есть один кусок данных и два ребенка, каждый из которых является черным узлом. Черные узлы могут иметь: 1) одну часть данных и два дочерних элемента, которые являются красными узлами; 2) одна часть данных и два ребенка, которые являются черными узлами; или 3) нет данных и нет детей (т. е. листового узла). (Это не точное описание красно-черных деревьев, но требует для этого упражнения.)
Напишите пару взаимно-рекурсивных типов OCaml, которые представляют собой красные узлы и черные узлы в красно-черных деревьях. Данные должны иметь любой тип, т. Е. Ваш тип должен быть полиморфным в виде данных, хранящихся в дереве.
Я обновил свой пост с примером, как это. Однако, когда я предложил это профессору, она сказала, что это не пример пары рекурсивных типов. – dmcqu314
Может, она придирчива, что это не пара, а триплекс? ;) Вы можете указать ей на то, что 'red_node' зависит от' black_node' и 'black_node' зависит от' red_node'. Разве это не взаимно рекурсивно? – ivg
Это, возможно, профессора могут быть очень строгими. Я также опубликую описание проблемы. В худшем случае я включу то, что получил, так как для задания назначено всего 5/200 очков. – dmcqu314