(*
*)
(* 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);
(* *)