If you want to learn languages, implementing a lisp interpreter is a great exercise, and lots of fun too. Every time I come across a new language I want to give a try, creating a lisp interpreter is one of the first things I do.<p>If you're curious but want a more language-agnostic guide, mal (Make a lisp) is a language+project that has a guide you can follow along with basically any language, and if you get stuck, you can look at already implemented versions in practically any language: <a href="https://github.com/kanaka/mal">https://github.com/kanaka/mal</a><p>Personal favorite implementations of mal: nasm (assembly) (<a href="https://github.com/kanaka/mal/tree/master/impls/nasm">https://github.com/kanaka/mal/tree/master/impls/nasm</a>) and wasm (<a href="https://github.com/kanaka/mal/tree/master/impls/wasm">https://github.com/kanaka/mal/tree/master/impls/wasm</a>)<p>mal has also been discussed many times on HN (which is probably how I came across it the first time too) for close to a decade by now: <a href="https://hn.algolia.com/?query=kanaka%2Fmal" rel="nofollow">https://hn.algolia.com/?query=kanaka%2Fmal</a>