What varieties of LISP are there? [closed]
What are the different varieties of LISP and what are the most significant differences between them?
The most popular dialects today are: Common Lisp, Scheme, and Clojure
The Clojure website has a page comparing and contrasting all three. Lisp diehards tend to prefer CL or Scheme. Clojure is the "hot new thing" and is a hybridization of Lisp and Java.
Common Lisp and Scheme both have a large number of implementations to pick from. Clojure has two: one for the JVM and one for the CLR.
- Common Lisp Implementations
- Scheme Implementation Choices
- Scheme vs. Common Lisp
There is also Dr. Mark Tarver's Qi, which runs (at least) on top of CL. Qi introduces features of functional languages like ML and Haskell to Lisp, for example a very powerful (optional) type system. To quote the website:
Qi is an award-winning functional programming language based on 20 years R&D that offers the advantages of pattern matching, λ calculus consistency, optional lazy evaluation and static type checking. It uses sequent calculus notation to define types, and has the most powerful type system of any existing functional language, including ML and Haskell. Qi includes an integrated fully functional Prolog and an inbuilt compiler-compiler. Qi is free for personal and educational use and runs under Common Lisp.
There is an introduction for Lisp programmers, which will serve as a nice comparison to more "traditional" Lisps.
This is a reenactment of a talk from 1993 about the history of Lisp:
http://www.infoq.com/presentations/Lisp-Guy-Steele-Richard-Gabriel
It shows the intertwined paths the Lisp language(s) have taken from the beginning (in about 1958) until about 1993.
Since 1993, I think that the following notable developments have occurred:
- 1994: ANSI Common Lisp standard, based on "Common Lisp the Language, version 2" from 1990.
- 2007: Clojure.
There were also several less notable developments, like Pico Lisp and New Lisp, which have not seen wide adoption, though. In essence, every serious hacker and his dog have at some time developed their own Lisp dialect, or "Lisp essay".
Today, there are four main Lisp varieties in wide circulation: Common Lisp, Scheme, Emacs Lisp, and Clojure.
The main differences are, from the top of my head:
- Dynamic versus lexical scope: Scheme uses lexical scope, Emacs Lisp dynamic scope; Common Lisp uses lexical scope by default, but allows dynamic scope declarations. I think that Clojure also uses only lexical scope.
- Separate function and variable namespaces: Scheme and Clojure use a single namespace for both, the others have separate namespaces for this (this is orthogonal to the namespaces in the next bullet point).
- Packages: Clojure gets namespace separation from Java, Common Lisp has an elaborate package system. Emacs Lisp has none. I am not sure about Scheme.
Major lisp dialects:
- Common Lisp
- Scheme
- Clojure
Minor lisp dialects (some possibly dead):
- Arc
- Newlisp
- ISLISP
- Your toy "not quite yet" scheme
- ...
精彩评论