- Have a really, really smart interpreter that can often convert nondestructive algorithms to efficient in-place ones. This seems difficult.
- Overload foo!. That is, interpret foo! as either foo! itself if it is defined, or (lambda (x . args) (= x (foo s . args))) if it doesn't.