clojure符号解决评估中的故障

clojure符号解决评估中的故障,clojure,Clojure,我是clojure的初学者。 你能帮我解释一下最后2个表达式吗? 我无法理解为什么“无法解析符号:此上下文中的结果”。 谢谢! (我试图解决一个问题,其中列表中有引用。) 我希望(map eval result)能够生成[2]eval对您在绑定到*ns*的命名空间中发送的表单进行求值,但词法范围为空。因此,周围的let值不会结转。但是,定义的变量、动态绑定等都将存在。这篇文章解释得很好 顺便说一句,eval对于初学者来说是一种非常强大且令人困惑的酒。在clojure 6-7年的编程生涯中,我从未

我是clojure的初学者。 你能帮我解释一下最后2个表达式吗? 我无法理解为什么“无法解析符号:此上下文中的结果”。 谢谢! (我试图解决一个问题,其中列表中有引用。)


我希望
(map eval result)
能够生成
[2]
eval
对您在绑定到
*ns*
的命名空间中发送的表单进行求值,但词法范围为空。因此,周围的let值不会结转。但是,定义的变量、动态绑定等都将存在。这篇文章解释得很好


顺便说一句,
eval
对于初学者来说是一种非常强大且令人困惑的酒。在clojure 6-7年的编程生涯中,我从未需要过它。

你好,谢谢你的帮助!有没有更好的方法来处理这个问题:[(+1-2)0(-1-3)(*3-1)](n表示vec中的第n个元素)eval不会以空白名称空间开始。它在调用eval的名称空间的上下文中求值。如果正确,它以一个空白的词法范围开始。谢谢,解释它的一种方法是,好像表达式是作为顶级表单键入到文件中的一样。@Arthurlfeldt也不是这样。它在
*ns*
的上下文中求值。在交互式repl中,这是您定义的名称空间,但在非交互式程序的上下文中,
*ns*
通常是,我认为,
用户
。通过运行类似于
(def x 1)(defn-main[](println(eval'*ns*))(println(eval'x)))的程序可以看到这一点。
(let [result ['(get result 1) 2]]
  (println (get result 1))          ;this can work
  (println (eval '(get result 1)))  ;error
  (println (eval(first result))))   ;error`