@jmw150 I actually just worked with this technique recently! It's super handy to do in Lisp, as S expressions are already ASTs, so you can just take any sub-expression and replace it with any other that returns the same type, which is pretty trivial in Lisp/Scheme dialects.
Of course, this paper you refer to seems substantially more advanced than the simple methods we leveraged.