(********************************************************************************** ****************** Assignment 5 ************************************************** **********************************************************************************) (* Configure printing *) Control.Print.printDepth := 100; (****************** Datatypes *****************************************************) (* n-ary tree *) datatype 'a n_tree = Leaf of 'a | N_branch of 'a n_tree list (* n-ary itree *) datatype 'a labeled_n_tree = L_Leaf of 'a | L_N_branch of 'a * 'a labeled_n_tree list (* lazy list *) datatype 'a seq = Nil | Cons of 'a * (unit -> 'a seq) (****************** Auxiliary functions ******************************************) (* Take from sequence *) val rec take = fn (seq, 0) => [ ] | (Nil, n) => raise Subscript | (Cons(h, t), n) => h::take(t(), n-1); (* Even numbers sequence builder *) val rec evens_from = fn (n) => Cons(n, fn() => evens_from(n + 2)); (* Add sequences *) val rec add_seqs = fn (Cons(h, t), Cons (h', t')) => Cons(h + h', fn() => add_seqs(t(), t'())) | _ => Nil;