public Expression substitute(IPersistentMap bindings) {
int i=0;
Expression nx=null;
for (;i<length; i++) {
Expression x=vals.get(i);
nx=x.substitute(bindings);
if (nx==null) return null;
if (nx!=x) break;
}
if (i==length) return this; // no changes
ArrayList<Expression> al=new ArrayList<Expression>();