Divers caractères spéciaux en clojure sont des abréviations pour des choses
(quote (a b))
est le même que '(a b)
comme vous pouvez le voir par l'évaluation:
user> ''(a b)
(quote (a b))
Cela semble être la syntaxe comme abréviation, ce qui me semble une bonne idée.
Mais la syntaxe-citation ` , semble spécial. Je ne peux pas penser à ce qui serait l'équivalent de
`(a b)
J'aurais deviné quelque chose comme (syntax-quote (a b))
, mais ça ne fonctionne pas, et si j'ai un peu deviné tort, je ne peux pas savoir ce que c'est vraiment appelé.
user> '`(a b)
(clojure.core/seq (clojure.core/concat (clojure.core/list (quote user/a)) (clojure.core/list (quote user/b))))
C'est un peu déconcertant.
Sans doute le lecteur à faire quelque chose de spécial, peut-être parce qu'il a besoin de connaître les espaces de noms?
Fait intéressant, la syntaxe utilisée dans la syntaxe-citation ne fonctionne pas comme je l'attendais:
user> '~a
(clojure.core/unquote a)
user> '~@a
(clojure.core/unquote-splicing a)
user> '~'a
(clojure.core/unquote (quote a))
sauf pour celui-ci:
user> 'a#
a#
Qui j'aurais pensé que cela produit quelque chose comme (unquote (gensym "a"))
Je ne réalise que je suis peut être un peu faible ici, et devrait juste d'aller lire le code. Si personne ne croit en expliquant ce qui se passe ou de donner une référence, quelqu'un peut me donner un indice sur la façon de trouver le code et ce que vous recherchez?