- let rec set t ~k ~v =
- match t with
- | Leaf -> Node (k, v, Leaf, Leaf)
- | Node (k', v', l, r) when k < k' -> Node (k', v', set l ~k ~v, r)
- | Node (k', v', l, r) when k > k' -> Node (k', v', l, set r ~k ~v)
- | Node (k, _, l, r) -> Node (k, v, l, r)
-
- let rec get t ~k =
- match t with
- | Leaf -> None
- | Node (k', _, l, _) when k < k' -> get l ~k
- | Node (k', _, _, r) when k > k' -> get r ~k
- | Node (_, v, _, _) -> Some v
-
- let rec member t ~k =
- match t with
- | Leaf -> false
- | Node (k', _, l, _) when k < k' -> member l ~k
- | Node (k', _, _, r) when k > k' -> member r ~k
- | Node _ -> true