mv lab 07 to 06
This commit is contained in:
6 files changed
+136
No files matched your search
@@ -0,0 +1,44 @@
|
||||
type bstree = L | N of int * bstree * bstree
|
||||
|
||||
let rec insert x t =
|
||||
match t with
|
||||
| L -> N (x, L, L)
|
||||
| N (x', l, r) ->
|
||||
if x < x' then N (x', insert x l, r)
|
||||
else if x > x' then N (x', l, insert x r)
|
||||
else t
|
||||
|
||||
let of_list l = List.fold_left (Fun.flip insert) L l
|
||||
|
||||
(* val right : bstree -> bstree option *)
|
||||
let right t =
|
||||
match t with
|
||||
| L -> None
|
||||
| N (_, _, r) -> Some r
|
||||
|
||||
(* val left : bstree -> bstree option *)
|
||||
let left t =
|
||||
match t with
|
||||
| L -> None
|
||||
| N (_, l, _) -> Some l
|
||||
|
||||
let right_left t =
|
||||
match right t with
|
||||
| None -> None
|
||||
| Some r -> left r
|
||||
|
||||
(* maybe monad *)
|
||||
let bind mt f =
|
||||
match mt with
|
||||
| None -> None
|
||||
| Some t -> f t
|
||||
|
||||
let ( >>= ) = bind
|
||||
|
||||
let t = of_list [3;2;7;6;8];;
|
||||
t |> right >>= left;;
|
||||
t |> right >>= left >>= right >>= left;;
|
||||
|
||||
let return t = Some t;;
|
||||
|
||||
return t >>= right >>= left;;
|
||||
Reference in new issue
Block a user