Переменная область + eval в Clojure

В Clojure,

(def x 3)
(eval '(prn x))

prints 3, тогда как

(let [y 3]
   (eval '(prn y)))

а такж

(binding [z 3] (eval '(prn z)))

создать исключение «Невозможно разрешить переменную».

Согласно сhttp: //clojure.org/evaluatio, eval, load-string и т. д. генерируют временные пространства имен для оценки их содержимого. Поэтому я не ожидал, что ни один из приведенных выше примеров кода не будет работать, так как(def x 3) сделано в моем текущем пространстве имен, а не в том, что созданоeval.

Почему работает первый пример кода, а не последние два?Как я могуeval форма со связанными переменными без использованияdef?

Благодарность

Ответы на вопрос(1)

Ваш ответ на вопрос