2013-05-21 1 views
1

Итак, вот моя проблема. Мне нужно написать функцию, которая будет добавлять элементы в дерево, и это двоичное дерево, поэтому оно должно быть хорошо организовано. Проблема в том, как определяется мое дерево. У меня есть это дерево:Добавить элементы в 'дерево в Ocaml

type 'a tree = { 
    mutable cont:'a; 
    mutable left:'a bin_tree; 
    mutable right:'a bin_tree 
    } 
    and 'a bin_tree = 
    Empty 
    |Node of 'a bin_tree;; 

Так что, когда я пишу функцию, чтобы добавить элементы в этом дереве он говорит, что дерево типа «дерево, и я использую функцию» в bin_tree.

Я пробовал много разных способов написать эту функцию, и я получаю ту же ошибку. Функция я последнее:

let rec dodajVDrevo x = function 
Empty -> Node{cont=x; left=Empty; right=Empty} 
|Node{cont; left; right} -> if x < cont then Node{cont; left= dodajVDrevo x left; right} 
else if x > cont then Node{cont; left; right = dodajVDrevo x right} 
else Node{cont; left; right};; 

Пожалуйста, помогите мне и дать некоторые подсказки.

Спасибо!

+0

Почему вы определили left, right и cont как mutable? Ваша функция добавления (dodajVDrevo) уже чиста. Поскольку это выглядит как домашнее задание, я предполагаю, что смысл вашего упражнения, чтобы стать знакомым с функциональным стилем программирования; не грязный c-like ocaml-код с изменчивостью. – rafix

+0

Это дубликат: http://stackoverflow.com/questions/16507273/ocaml-tree-simple-functions – Thomash

ответ

2

Конструктор Node должен принимать 'a tree вместо 'a bin_tree.

+0

Да, я знаю об этом, но я не знаю, как это сделать. – Marko

+2

Что это значит? Просто замените текст '| Node of 'bin_tree' на' | Node of' tree '. – cygin

Смежные вопросы