Двойное минимальное значение в индуктивном дереве типов Ocaml - PullRequest
0 голосов
/ 02 мая 2018

У меня есть индуктивное дерево типов, определенное следующим образом:

type 'a tree1 = Leaf of 'a
           |Branch of 'a tree1 * 'a tree1 

Я хочу иметь функцию, которая принимает это дерево в качестве входных данных, находит минимальное значение в этом дереве, удваивает его (давайте назовем результат как a), а затем воспроизводит другое дерево того же типа, которое все его листья заменены на.

У меня есть пара функций, которые помогут мне сделать это:

let rec findmin (mytree: int tree1) : int  = match mytree with
|Leaf a -> a
|Branch(Leaf x, Leaf y) -> min x y
|Branch(left, right) -> min (findmin left) (findmin right)  

let rec repdoublemin (mytree: int tree1) : int tree1 = match mytree with
|Leaf a -> Leaf (2*a)
|Branch(Leaf x, Leaf y) -> let result = 2 * findmin (Branch(Leaf x, Leaf y)) 
 in Branch (Leaf result, Leaf result)
|Branch(left,right) -> Branch(repdoublemin left, repdoublemin right)

Мой результат не тот, который я ожидал.

repdoublemin Branch (Leaf 5, Branch (Leaf 3, Leaf 10));;
- : int tree1 = Branch (Leaf 10, Branch (Leaf 6, Leaf 6))                              

и я должен получить:

- : int tree1 = Branch (Leaf 6, Branch (Leaf 6, Leaf 6))                              

1 Ответ

0 голосов
/ 02 мая 2018

Мое предложение было бы написать вспомогательную функцию

replace_all_values : 'a -> 'b tree1 -> 'a tree1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...