Ben programlı datalog sorguları oluşturmak için çalışıyorum, ama ben bir örnek işlevi ile gösterilecektir sorun haline çalışmasını sağlamak am:Neden clojure ad alanı niteleyicileri bir backquote içindeki isimlere ekliyor?
(defn test-expr [attribute]
`[?entity ~attribute ?value]])
koşuyorum (test-expr 3), ben çıkışını beklenir:
[?entity 3 ?value]
Ama onun yerine, ben açıkçası ne istiyorum değil
[mynamespace/?entity 3 mynamespace/?value]
olsun. Clojure'a söyleyebilmenin bir yolu var mı "lütfen sadece listeyi alıntıla ve sana anlattığım değişkenleri genişlet" mi?
Nedeni, kullanıcıların (* öksürük * siz) yanlışlıkla kullandığınız aynı ada sahip işlevleri ve/veya değişkenleri tanımlayarak makrolarınızı kırmasını önlemektir. – Cubic
@Cubic, kabul etti. Anladığım kadarıyla, bu, Scheme hygienic makroları ve Common Lisp düz makro sistemleri arasında bir tür uzlaşmadır: makro tanımları, Common Lisp olanlara benzemektedir (Scheme makrolarının IMO yazması daha zor olduğundan, bu iyi bir şeydir), ancak varsayılan olarak belirli bir düzeyde hijyen mevcut - semboller körü körüne yakalanmamakta, ancak bunun yerine isim alanı ile ön eklenmiştir. Gerektiğinde (örneğin, anaporik makrolar için) düz sübstitüsyonlara geri dönmek her zaman mümkündür. –