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: