I always recommend Make a Lisp [0]. It's a guided experience creating a Lisp in whatever language you already know. If you go through all the steps, you'll have created a self hosting Clojure-like Lisp.
For me implementing a Lisp piece by piece helped me better understand its core ideas.
For me implementing a Lisp piece by piece helped me better understand its core ideas.
[0] https://github.com/kanaka/mal