Как некоторые из вас знают, я использую Shen в Clojure.
Поскольку у Shen двойное пространство имен, и все символы оценивают сами себя, мне нужен макрос Clojure, который связывает символ с собой, а значение с постфиксным символом.
Теперь и символы типа *language*
должны быть связаны. Но когда я использую следующий макрос с *language*
в качестве параметра, я получаю Warning: *language* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. Please either indicate ^:dynamic *language* or change the name.
(defmacro set [x y]
`(let [y# ~y]
(def ^:dynamic ~x '~x)
(intern *ns* (symbol (str (name ~x) "__varPoF__")))
(def ^:dynamic ~(symbol (str (name x) "__varPoF__")) y#)
y#))
Может кто-нибудь сказать мне, почему это не работает?