Why is clojure adding namespace qualifiers to names inside a backquote?
clojure, datomic, macros
Solution
Yes, there is.
(defn test-expr [attribute]
`[~'?entity ~attribute ~'?value])
Here you first unquote the syntax quotation and then immediately quote the symbol (`~'` construct) again. The result is namespace-less symbol.
It is equivalent to the following, which explains how it works:
(defn test-expr [attribute]
`[~(quote ?entity) ~attribute ~(quote ?value)])
Problem
I am trying to build datalog queries programmatically, but keep running into the problem that I will illustrate with an example function: ``` (defn test-expr [attribute] `[?entity ~attribute ?value]]) ``` When I run (test-expr 3), I would expect the output: ``` [?entity 3 ?value] ``` But instead, I get ``` [mynamespace/?entity 3 mynamespace/?value] ``` Which obviously is not what I want. Is there a way to tell clojure "please just quote the list and expand variables I tell you to?"