I have recently completed several algorithmic composition projects involving Common Lisp. These include:

There are things that I do not, or at least did not, like about Lisp. And there are things that I do like. But, now that I have moved on from just getting Lisp example pieces to work, to actually composing my own pieces in Lisp, I am finally beginning to “get” Lisp.

Things that I do not, or did not, like:

Many incompatible or partial implementations of the ANSI Lisp standard, resulting in many libraries that worked with only one or a few implementations of Lisp. Thanks to the general adoption of Another System Definition Facility (ASDF), this finally seems to have changed. After I created an ASDF system for nudruz using Steel Bank Common Lisp, it loaded and ran in Embeddable Common Lisp with only one minor change (getting rid of clocc.fasl; thanks, azimut).



seems to have changed. After I created an ASDF system for nudruz using Steel Bank Common Lisp, it loaded and ran in Embeddable Common Lisp with only one minor change (getting rid of clocc.fasl; thanks, azimut). Lisp syntax is primitive, arcane, and full of subtle “gotchas.” This has not changed. And I still do not like it.



Things that I do like:

Common Lisp has both an interpreter so it can act as a scripting language, and a machine language compiler that produces programs running almost as fast as compiled C or C++ code.



Thanks to ASDF, the ASDF system definition can act as a build system for compiling that system.



Although Lisp syntax is primitive and arcane, it is closely based upon the lambda calculus, which is one of several interchangeable formal representations of the universal Turing machine.



What I have found is that the fairy tales of the Lisp hackers seem, so far, to have some truth. It will take several months, at least, for me to get a more complete feeling for the usefulness of Common Lisp as compared to my current main languages, C++ and JavaScript. But, so far, I am finding that Lisp is more powerful, and I can program faster in Lisp.

Why is this? I think it is because: