I don't fully grasp the advantages of being a Lisp-1 or Lisp-2 :)
I don't fully grasp the advantages of being a Lisp-1 or Lisp-2 :)
It has to do with variable scoping. Lisp-1 only accepts lexical scoping, while Lisp-2 also allows for dynamic scoping.
No.
Lisp-N has to do with the number of name spaces in the language. Lisp-1s only have ONE environment; the variables range over all values of the language, integers, functions, vectors, symbols, strings. In Lisp-N, there are N namespaces for each "kind" of value.
Common Lisp is called a "Lisp-2" because it separates functions from other values. (it's closer to Lisp-5 or even Lisp-7, forgot which, because it allows that many kinds of "names" without collission.
Also above you said Clojure "probably" has better data structures than Common Lisp. That is unsubstantiated.
I'm not much of a common lisp programmer (mostly sticking with scheme/racket and Clojure), but I don't think they've been ported to Common Lisp (yet), so the claim that Clojure has better data structures than Common Lisp, while somewhat a matter of preference, isn't entirely unsubstantiated.
The language provides a wealth of tools out of the box, but it's the job of the programmer to choose more appropriate tools for the problems at hand.
The following is the Common Lisp specification. 12+ implementations, half of them industrial strength, more than half commercial vendors, and everyone of them has to adhere to this spec:
http://www.franz.com/support/documentation/8.2/ansicl/ansicl...
If you mean can users extend the core CL data-types, no, but you have a wealth of tools to do that yourself; use generic functions to implement whatever interface you wish, then provide for specific implementations.
That's the problem. With Clojure you don't have to invent interfaces and then convince other libraries to use them. All the data structures are built upon well considered language level protocols that anyone can implement preventing pointless API proliferation.
Personally, I slightly prefer Clojure over SBCL.
It is my understanding that Common Lisp lacks the vector and hash maps that Clojure has.
Sorry if I got it wrong. I am more a ML guy than Lisp.
From the documentation I have not seen the simplified syntax Clojure uses for vectors, hashes and sets.
I imagine that the syntax is Clojure specific.
Also, Clojure supports (optional) dynamically scoped variables.