将列表评估为let on clojure

pat*_*atz 4 binding eval clojure let

我的问题是下一个,我尝试用一​​些变量来评估列表,使用let来赋值给这个变量

如果我这样做(def a (list * 'x 'y)),(let [x 3 y 3] (eval a))我有一个CompilerException java.lang.RuntimeException:无法在此上下文中解析符号:x,编译:(NO_SOURCE_PATH:6)

但如果我跑了 (def x 4) (def y 4),(eval a)我有一个16,无论如何,如果我再次跑(let [x 3 y 3] (eval a)),我有16,

存在一种正确绑定x和y并评估列表的方法?

TY!

fog*_*gus 5

let定义无法从eval函数体访问的词法范围绑定.这与任何其他功能没有什么不同.但是,创建的绑定def是可访问的,因为它们是名称空间全局.所有函数都可以访问命名空间全局变量,只要它们是公共的.