Emacs lisp has, as far as I can tell, no advantages. It isn't especially good at text editing. It introduces differences from more popular lisp dialects. Anything it offers could be a library in some other lisp.
Clojure on the other hand, has a couple of nice syntax innovations and smooth default data structures.
Emacs Lisp (elisp) is a language specifically created as a scripting language for an editor, maintained by an organization, with one compiler (AFAIK) and 99% of usage is within Emacs.
It's not hard to imagine people preferring Clojure before elisp, especially outside of Emacs.
But to be frank, it's hard for me to imagine people preferring Vim over anything that isn't ed ;). Although, at least using ed you don't need to type the colons :)
We've come full circle.
user=> (type [])
clojure.lang.PersistentVector
user=> (type '()) ; gotta quote the list
clojure.lang.PersistentList$EmptyList
user=> (type {})
clojure.lang.PersistentArrayMap
user=> (type #{})
clojure.lang.PersistentHashSet
Different data types are used for different things. Vectors have more natural insertion behavior, so most people use them where that might happen. user=> (conj '(1) 2)
(2 1)
user=> (conj [1] 2)
[1 2] (let ((foo bar)
baz
(quux frob))
...)
In Clojure not only are the bindings unstructured, they are thrown into a vector. Not a list, not a map (for which Clojure has dedicated syntax, mind), a vector. (let [foo bar baz quux frob]
...)
And that is one of the only two places I know of where Clojure arbitrarily uses a vector when it uses lists everywhere else: (defn foo [bar] ...)
Instead of either of: (defn foo (bar) ...)
[defn foo [bar] ...]=> true
> "There are things I'll never understand."
"There are things I'll never understand."
for me. But > (cond ("There are things I'll never understand." 'true))
true
works.Seriously I'm glad to not understand everything, that would be quite worrying and/or boring.