Various special characters in clojure are abbreviations for things
(quote (a b)) is the same as '(a b)
as you can see by evaluating:
user> ''(a b) (quote (a b)) This seems to be syntax as abbreviation, which strikes me as a fine idea.
But the syntax-quote, ` , seems special. I can't think what would be equivalent to
`(a b) I would have guessed something like (syntax-quote (a b)) , but it doesn't work, and if I've just guessed wrong, I can't find out what it's really called.
user> '`(a b) (clojure.core/seq (clojure.core/concat (clojure.core/list (quote user/a)) (clojure.core/list (quote user/b)))) Is a bit mystifying.
Presumably the reader's doing something special, maybe because it needs to know the namespaces?
Interestingly, the special syntax used in the syntax-quote does work as I expected:
user> '~a (clojure.core/unquote a) user> '~@a (clojure.core/unquote-splicing a) user> '~'a (clojure.core/unquote (quote a)) except for this one:
user> 'a# a# Which I would have thought produced something like (unquote (gensym "a"))
I do realise that I'm being a bit feeble here, and should just go and read the code. If no-one fancies explaining what's going on or giving a reference, can anyone give me a hint about how to find the relevant code and what to look for?