Which Lisp Should You Learn?

By Xah Lee. Date:

Javier wrote:

What open source implementation of Lisp do you prefer and why?

My fav is Emacs Lisp.

Because it is practical. More or less the most widely used lisp today.

Considered as a tool, it has probably some 10 times more users than either Common Lisp or Scheme Lisp.

For example, i consider emacs lisp, more powerful than Perl, as a text processing language, for 2 major reasons: (1) It has buffer datatype and associated datatypes such as point, marker, region, etc. Which is more powerful than treating text as inert chars and lines, which Perl, Python, Ruby, etc do. [see Text Processing: Emacs Lisp vs Perl] (2) elisp's integrated nature with emacs. This means, for odd text manipulation jobs that happen daily in every day coding, i can write text processing programs that interact with me while i edit. [see Why Emacs is Still so Useful Today]

The above paragraph, details why i love emacs lisp. However, it is not so much caused by lisp language's nature. I find nothing in particular of lisp lang's features of emacs lisp that made me love emacs lisp, other than it being a functional language. It is not difficult to have another language, or a new editor with a embedded lang that functions similar to emacs. However, emacs just happens to be the most prominent one. (also, numerous emacs-like editor with embedded lang exist. See: Thoughts on Common Lisp Scheme Lisp Based Emacs.)

As to the reason i am not a fan of the 2 other major lisps: Common Lisp and Scheme Lisp. These 2, are little used in the industry. Common Lisp is a moribund dinosaur. Scheme Lisp is little used and is confined to academia. There is nothing in these 2 langs that i consider elegant or powerful today. I would, in a blink of a eye, consider Wolfram Language [see Wolfram Language], OCaml, more elegant or powerful. [see Language, Purity, Cult, and Deception]

I do consider lisp, or the lisp way, a lang with lisp characteristics, can be the most beautiful, elegant language. (in fact, i consider Mathematica being one such example) However, given the social milieu of the 3 major lisp communities: Common Lisp, Scheme Lisp, Emacs Lisp, it might happen when pigs fly.

Of the existing lisps, especially new ones, i support newLISP, and i also support Clojure. [see Clojure Tutorial] I would recommend these 2 over Common/Scheme lisp. Second to these, i mildly support Qi Lisp for those who are language researchers.

I am a avid fan of functional programing, and was a big fan of lisp too. Lisp, even just 10 years ago, was still a great language, almost the only one that are much better than all others, in both practical industry use and also academic theoretical considerations. But due to the rapid development of software technologies and vast number of lang today that happened in the past decade, including a profusion of quality functional langs, i see little point in lisp. (See also: Proliferation of Programing Languages.)

Water Lin wrote:

I am really confused which kind of Lisp I should focus on…

Rainer Joswig wrote:

Common Lisp is fine. Get a copy of the book Practical Common Lisp …

Emacs is a simple Lisp dialect for Emacs scripting. It is behind the times in many ways.

Scheme: Typically one can start with DrScheme and one of the Scheme books. But I would prefer Common Lisp .

Note that Rainer is a Common Lisp fanatic. He's been posting regularly in comp.lang.lisp since at least 1999, and it seems to me he does not know any other functional lang other than common lisp, but always trumpet Common Lisp in every aspect, and is often aggressive in his online behavior that you can often see he fight with other lispers too. I think he's retired in his 50s or older. Much regular posters in comp.lang.lisp are old. (majority would be above 40 i think. (I'm 40 myself.))

If emacs lisp is behind the times in many ways, which is true, Common Lisp is also behind the times in many ways.

If you really want to compare lisps in the context of computer langs, lisps in my opinion is pretty much obsolete. I'd recommend JavaScript, Ruby, Ocaml, Mathematica, over any lisp. I think that each of the lang above is technically superior. Also, each of the lang mentioned above has perhaps 10 times more programers than all lisps combined. (In the case of JavaScript, it's probably few thousand times)

You can start with some basic tutorial here:

See also:

Why Learn Emacs Lisp and Not Common Lisp?

Xah Lee wrote:

If emacs lisp is behind the times in many ways, which is true, Common Lisp is also behind the times in many ways.

Rainer Joswig wrote:

How would you know? You never have read a book or manual about Common Lisp or one of its implementations.

Emacs Lisp

  • + dynamic scope
  • + eval
  • + simple compiler
  • + simple data structures
  • - no objects
  • - no lexical binding
  • - primitive compiler
  • - mostly only available with Emacs
  • - no threading
  • - never modernized
  • - no continuations

Common Lisp

  • + dynamic scope
  • + lexical scope
  • + eval
  • + compile
  • + objects (Common Lisp Object System)
  • + sophisticated compilers available
  • + threading with multicore-support available
  • + can be used for scripting (CLISP)
  • + can be used to write applications
  • + several independent implementations
  • - oldish standard
  • - continuations only partially via libaries

If you look around all educational resources (books, implementations) are around Scheme and Common Lisp. Emacs Lisp is mostly NOT used in schools or universities. The universities and schools that teach introductions to programming or computer science using some Lisp dialect are using mostly Scheme (some are using Logo). Universities are sometimes offering Common Lisp courses.

I fully agree with what you wrote above.

However, to put things in proper context, if the question we are asking is which lang to choose among lisp for typical programer in industry familiar with imperative langs (C, C++, Java, Perl, Visual Basic, JavaScript etc), i think emacs lisp can easily be the right choice, for one simple reason: practical utility.

You see, to a professional programer, who is studying lisp to learn some new language concept and aspects, elisp is of the most utility because:

If a industrial programer coming from C, Java, Perl, etc imperative or static langs wants to learn lisp's concepts, he can learn all of them with the very simple and useful emacs lisp. If he is so hooked, he can then trivially extend his knowledge and start to learn one of Scheme lisp or Common lisp and start to write whatever real software he had in mind using these langs.

This is why, i recommend emacs lisp, among the 3 major lisps, for imperative programers who want to venture into lisp.

(for those unaware, there are also Clojure, newLISP, Arc. Their number of users, and age of the lang, are roughly in that order given too.)

Now, if a imperative coder is wondering which lang he should learn outside of his meager C, C++, Java, Perl, type of imperative langs, for the purpose of enriching his knowledge in comp langs in some academic sense, without asking for a lisp in particular, then, i would recommend: OCaml/F#, Mathematica, over any lisp.

All of us are busy, and all of us geeks always have aspiration to learn new langs, but not always follow thru. If a imperative programer tried to learn lisp for half a year in his spare time, then, whatever he has learned with emacs lisp remains quite useful in his programing career. If he kept on using emacs, his lisp knowledge will simply grow. But whatever he learned in Common or Scheme lisp would rather find no-where to go and be forgotten.