P2: Assign only once to a variable

This restriction implies that "=" can only be used in a constructor.

Thus "for" loops are out. Replace iteration with tail recursion. sum and es are the two variables assigned to.

class Puzzler_2 extends Object {
	public int sum_odd(Cons es) {
		return loop(0, es);
	}
	private int reduce(int sum, int e) {
		return e%2 == 1 ? sum + e : e;
	}
	private int loop(int sofar, Cons es) {
		if (Cons.isNull(es)) return sofar;
		  return loop(reduce(sofar, es.car()), es.cdr());
	}
}

This solution does not use = at all. All variable binding happens at method invocations.

We can represent a wide range of loops simply by replacing reduce.

Power: