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?”
Yes, there is.
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: