What about common lisp

Me too. CL is great, but it’s kind of a mess, and in a weird way, that’s a source of its quirky beauty, and certainly of its power. I love Clojure’s relative simplicity and consistency, and it forced me to learn and appreciate real functional programming more deeply than previously.

Maybe this was covered in Dipert’s talk–forgive me if you know this: CL is a mess because it was literally designed by a committee. Its predecessors were lisps that had evolved apart as researchers at different universities and companies added functions and features. So there are functions whose purposes overlap, but have different syntaxes. And there is less syntactic consistency across functions that do different things than there is in Clojure. But because the designers wanted CL to support all of the different programming paradigms that lisp folks were exploring, you can do things in lots of different ways. It also means that there are lots of libraries, but sometimes there are too many to choose from, and some of them might not have been updated for decades, but you’ll still find them in a list of libraries that you have to sort through. The fact that it’s a lisp-2 rather than a lisp-1 means that some areas of functional programming are inelegant. On the other hand, it’s harder to make certain mistakes in a lisp-2.

None of those are reasons not to learn CL. And SBCL is great. You might want to start with a slightly friendlier Common Lisp implementation at the beginning, though. I like CCL for that, and Clisp is good for that purpose, too. Also, if you like an IDE, the free version of LispWorks is good, if that’s still available. After I got used to CL again (I’d played with it earlier), I used SBCL almost exclusively. (Proviso: I haven’t used CL much for several years, so there may be other good options.)

(A warning: Several years ago, when I was using CL, I tried ABCL, which runs in the JVM. At that time, it was slow compared to any other well-known Common Lisp implementations, and interop with Java was painful. Clojure by contrast makes some sorts of interop trivial. Maybe Java interop in ABCL is easier now, but my belief at the time was that it was difficult simply because of the different semantics of Common Lisp and Java. Clojure was built from the start with the idea of Java interop in mind, and many of the basic datatypes are more or less Java datatypes, so you don’t have to work around differences in semantics.)

3 Likes