Metacircular interpreters leave much of the PL semantics ambiguous. Instead, write a metacircular compiler!
miniblog.
Related Posts
A really nice explanation of lisp semantics, using userland code!
For example, you can define let in terms of let* and vice versa.
"an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp"
Sounds like every metacircular interpreter I've written!
A metacircular interpreter in Prolog: https://www.metalevel.at/acomip/
The fact that this exists at all is mindbending to me. It's easy to just see Prolog as a logical reasoning engine.