(*
 *)

(* Data definitions *)
datatype 'a Tree 
   = Tip of 'a 
   | Fork of ('a Tree)*('a Tree)


(* function definitions *)

fun fact n = if n=0 
                then 1 
                else n * (fact (n-1));

fun depth (Tip a) = 0
  | depth (Fork(x,y)) = 
       1 + max (depth x, depth y);


(* global variable defintion *)

val tree1 = Fork(Fork(Tip 1,Tip 2), Tip 3);


(* booleans *)

true;

false;


(* mutual recursion *)


fun even 0 = true
  | even n = odd (n-1)
and odd  0 = false
  | odd  n = even (n-1);







(* 
*)