(* Consider binary trees with integer values at the leaves, and problems of (i) summing these values, (ii) counting all nodes+leaves. Procedural solution *) datatype tree = Node of tree * tree | Leaf of int fun sum t = case t of Node (l,r) => (sum l) + (sum r) | Leaf x => x fun count t = case t of Node (l,r) => (count l) + (count r) + 1 | Leaf x => 1 fun main() = let val t = Node(Leaf(1),Node(Leaf(2),Leaf(3))) val sum = sum t val count = count t in print ("Sum = " ^ (Int.toString sum) ^ "\n"); print ("Count = " ^ (Int.toString count) ^ "\n") end