Sto cercando di creare query Datalog a livello di codice, ma mantenere in esecuzione nel problema che illustrerò con una funzione di esempio:Perché clojure aggiunge qualificatori di namespace ai nomi all'interno di un backquote?
(defn test-expr [attribute]
`[?entity ~attribute ?value]])
Quando eseguo (test espr-3), mi sarei aspettato l'uscita:
[?entity 3 ?value]
Ma invece, ottengo
[mynamespace/?entity 3 mynamespace/?value]
Il che, ovviamente, non è quello che voglio. C'è un modo per dire clojure "per favore basta citare la lista ed espandere le variabili che ti dico?"
Per quanto riguarda il motivo, è per impedire agli utenti (* cough * you) di rompere accidentalmente i tuoi macro definendo funzioni e/o variabili con lo stesso nome che stai utilizzando. – Cubic
@Cubic, d'accordo. Per quanto ho capito, questa è una sorta di compromesso tra i macro igienici Scheme e i comuni sistemi macro Common Lisp: le definizioni macro sembrano quasi esattamente come quelle Common Lisp (questo è buono, dal momento che le macro Scheme sono più difficili da scrivere IMO), ma per impostazione predefinita c'è un certo livello di igiene presente - i simboli non vengono catturati ciecamente ma sono invece prefissati con namespace. Ed è sempre possibile ricorrere a semplici sostituzioni quando necessario (ad esempio per macro anaforiche). –