История изменений
Исправление unlog1c, (текущая версия) :
Изначально функция должна была получать выражение clojure в виде строки и выполнять ее. Но вот беда, eval ни как ни хочет видеть локальные переменные.
С этого бы и начал. defmacro здесь тебе не помощник, как я уже сказал иди читай что такое макросы.
Тебе нужно это (взято из M.Fogus «The Joy of Clojure»):
(defmacro local-context []
(let [symbols (keys &env)]
(zipmap (map (fn [sym] `(quote ~sym)) symbols) symbols)))
(local-context)
;=> {}
(let [a 1, b 2, c 3]
(let [b 200]
(local-context)))
;=> {a 1, b 200, c 3}
(defn contextual-eval [ctx expr]
(eval
`(let [~@(mapcat (fn [[k v]] [k `'~v]) ctx)]
~expr)))
Исходная версия unlog1c, :
Изначально функция должна была получать выражение clojure в виде строки и выполнять ее. Но вот беда, eval ни как ни хочет видеть локальные переменные.
С этого бы и начал. defmacro здесь тебе не помощник, как я уже сказал иди читай что такое макросы.
Тебе нужно это (взято из M.Fogus «The Joy of Clojure»):
(defmacro local-context []
(let [symbols (keys &env)]
(zipmap (map (fn [sym] `(quote ~sym)) symbols) symbols)))
(local-context)
;=> {}
(let [a 1, b 2, c 3]
(let [b 200]
(local-context)))
;=> {a 1, b 200, c 3}