@Override
public Expression optimise() {
Expression b=body.optimise();
Expression v=value.optimise();
if (value.isPure()) {
IPersistentSet bfree= b.accumulateFreeSymbols(PersistentHashSet.EMPTY);
if (!(bfree.contains(sym))) {
return b;
}
if (value.isConstant()) {
return b.substitute(PersistentHashMap.EMPTY.assoc(sym,value.eval())).optimise();
}