public abstract class FunList { public abstract Integer car(); public abstract FunList cdr(); public abstract Integer sum (); } public class Empty extends FunList { public Integer car() { throw new java.util.NoSuchElementException ("Empty has no element."); } public FunList cdr() { throw new java.util.NoSuchElementException ("Empty has no tail."); } /** * @returns Integer 0. * The sum over the empty set is 0! This way, recursion will terminate naturally. */ public Integer sum () { return new Integer (0); } } public class Cons extends FunList { private Integer _car; /** @SBGen Variable (,cdr,,64) */ private FunList _cdr; public Cons( Integer car, FunList cdr ) { _car = car; _cdr = cdr; } public Integer car() { return car; } public FunList cdr() { return cdr; } /** * @returns the Integer sum of the elements in this and its tail. */ public Integer sum () { int dat = _car.intValue (); int tailSum = _cdr.sum ().intValue (); return new Integer (dat + tailSum); } }