Lisp #

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)

  • 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.
  • Lisp as the Maxwell’s equations of computer science.
  • A great guide on building your own Lisp in C.
  • Some interesting notes on Lisp by Douglas Hofstadter.