datatype tree = L of int | N of int * tree * tree fun sum (L x) = x | sum (N(x,t,t')) = x + sum t + sum t' proc(1,20) arg 1, len, con 2, eq, cbranch 4, arg 1, getH 1, return, arg 1, getH 3, call 0, arg 1, getH 2, call 0, add, arg 1, getH 1, add, return (* ----- *) ilist = state ref state = Nil | N of int * ilist con 0, con 7, new 2 (* zyklische Liste *) con 0, con 8, new 2, dup (getF 1), dup, putH 2, con 7, new 2 (* Adresse = Zahlen Blöcke kein Längenfeld *) Bereinigung der Halde mit Cheney Idee: zwei Halden (alte und neue Halde) Speicherbereinigung indem man von alter in neue Halde kopiert und anschließend tauscht (neue Halde = alte Halde und umgekehrt) fun sum g = Array.foldl (fn (a,(x,_)) => a+x) 0 g