Look into “Make a Lisp” (MAL). Language agnostic step by step instructions for writing a fully featured interpreter, including tail recursion and reader macro support. Plus, examples in every language. It’s on github.
> It's on github
... at https://github.com/kanaka/mal
Fun fact: I got to work with Joel at a Clojure-based startup, LonoCloud (since acquired by ViaSat). Super sharp dude, and very helpful about MAL. Definitely recommend.