Итак, у меня есть дерево с определением:
type ('k, 'v) avlnode =
| Leaf
| Node of int * 'k * 'v * ('k, 'v) avlnode * ('k, 'v) avlnode
и функция для вставки значений в данное дерево.
let rec set (n : ('k, 'v) avlnode) (key : 'k) (value : 'v) : ('k, 'v) avlnode =
match n with
| Leaf -> Node (0, key, value, Leaf, Leaf)
| Node (h, k, v, left, right) ->
if k = key then Node (h, k, value, left, right)
else if key < k then Node (h, k, v, set left key value, right)
else Node (h, k, v, left, set right key value)
То, что я пытаюсь сделать, этонаписать функцию для вставки списка значений в дерево, используя Map.сейчас у меня есть этот фрагмент кода.
let add_all (n : ('k, 'v) avlnode) (keys : ('k * 'v) list) : ('k, 'v) avlnode =
let new_set (key : 'k * 'v) : ('k, 'v) avlnode = set n (fst key) (snd key) in
let mutated_nodes = List.map new_set keys in
match List.tl mutated_nodes with [] -> Leaf | f :: l -> f
Проблема с функцией заключается в том, что она вставляет каждое значение в исходное дерево, а не в новое мутированное дерево.Как мне написать эту функцию, чтобы у меня было дерево со всеми значениями в списке?