Lisp is a programming language.
The distinctive thing about Lisp is that its core is a language defined by writing an interpreter in itself. It wasn’t originally intended as a programming language in the ordinary sense. It was meant to be a formal model of computation, an alternative to the Turing machine. If you want to write an interpreter for a language in itself, what’s the minimum set of predefined operators you need? The Lisp that John McCarthy invented, or more accurately discovered, is an answer to that question. (Paul Graham)
Links and resources #
- MAL, or Make A Lisp, seems like a very interesting project where one implements a simple Lisp interpreter in any language; there are over 80 languages with example implementations. It’s probably a good exercise for Rust, Python or Julia.
- Interesting comparison of a Common Lisp development environment and a Python development environment. The following peeve of script-based Python development in an IDE, which doesn’t exist when you’re working in a REPL, resonated with me:
In Python, we typically restart everything at each code change, we use breakpoints: this takes some time, I find it too repetitive and boring, it requires to re-manipulate data to re-reach the state we were at to analyze and debug our program. We might figure out a non-standard, more interactive way, but still: a web server needs to restart, object instances don’t get updated after a class definition.
- A nice post about true REPL-driven development in lisp and why Python’s REPL doesn’t really meet the definition.
- A great guide to learning Common Lisp, with a list of resources.
- Structure and Interpretability of Computer Programs, a classic textbook on Lisp from MIT that is entirely available online.