type point = float * float;; type shape = | Point of point | Circle of point * float (* center and radius *) | Rect of point * point (* lower-left and upper-left *);; let area s = match s with | Point _ -> 0.0 | Circle (_,r) -> 3.14156 *. (r ** 2.0) | Rect ((x1,y1),(x2,y2)) -> let w = x2 -. x1 in let h = y2 -. y1 in w *. h;; let area = function | Point _ -> 0.0 | Circle (_,r) -> 3.14156 *. (r ** 2.0) | Rect ((x1,y1),(x2,y2)) -> let w = x2 -. x1 in let h = y2 -. y1 in w *. h;; let center = function | Point p -> p | Circle (p,_) -> p | Rect ((x1,y1),(x2,y2)) -> ((x2 -. x1) /. 2.0, (y2 -. y1) /. 2.0);; type int_btree = | Empty | Node of int_btree * int * int_btree;; type 'a btree = | Empty | Node of 'a btree * 'a * 'a btree;; let rec insert x t = match t with | Empty -> Node(Empty, x, Empty) | Node(left, value, right) -> if (x <= value) then Node(insert x left, value, right) else Node(left, value, insert x right) ;; let rec mem x t = match t with | Empty -> false | Node(left,v,right) -> if (x = v) then true else if (x < v) then mem x left else mem x right;;