Variables 计算引用的表达式Clojure
我很确定这个解决方案很简单,但很难找到。。。 所以如果我 如何计算表达式以便Variables 计算引用的表达式Clojure,variables,clojure,Variables,Clojure,我很确定这个解决方案很简单,但很难找到。。。 所以如果我 如何计算表达式以便 => (***insert function here** x) ;(1 2 3) 到目前为止,通过unquote我得到了(1(dec 3)3),这是没有引号的x,不是我想要的。我研究了`~x,它返回相同的结果。是否有~@和`的组合返回被计算的函数?(我在这里讨论函数,这些不是限制) 如果可能的话,请尽量不要改变我最初对x的定义 好的,假设这个问题的表达式是”(列表1(dec 3)3) 现在我如何检索 =&g
=> (***insert function here** x)
;(1 2 3)
到目前为止,通过unquote
我得到了(1(dec 3)3)
,这是没有引号的x,不是我想要的。我研究了`~x
,它返回相同的结果。是否有~@和`的组合返回被计算的函数?(我在这里讨论函数,这些不是限制)
如果可能的话,请尽量不要改变我最初对x的定义
好的,假设这个问题的表达式是
”(列表1(dec 3)3)
现在我如何检索
=> (***insert function here** x)
;(1 2 3)
是的,现在eval工作了。感谢您添加了重要的输入 这可以通过在序列列表上映射
eval
来实现
core> (def x '(1 (dec 3) 3))
core/x
core> x
(1 (dec 3) 3)
core> (map eval x)
(1 2 3)
core>
由于(1 2 3)
不是一个合适的函数调用,我们可以修复它,然后使用eval,它将处理任意嵌套的函数
utotestbed.core> (def x '(1 (dec 3) 3))
#'autotestbed.core/x
autotestbed.core> (eval (cons 'list x))
(1 2 3)
是的,我知道,但是我如何用x来计算表达式呢?这就是我所寻求的。好吧,我想这适用于这个例子,但不一定适用于任何表达式。。。如果我在另一个函数中有一个函数,其中引用了整个表达式,那么我需要映射两次。原始表达式的问题是它不是可计算表达式,因为(1…)是无效的函数调用-在clojure中不能调用数字。如果要引用有效的clojure表达式,可以使用eval对其进行完全求值。换言之,您可以使用有效的clojure表达式,也可以编写自己的语义,但确定表达式是一个表达式还是另一个表达式可能没有故障安全的方法。
utotestbed.core> (def x '(1 (dec 3) 3))
#'autotestbed.core/x
autotestbed.core> (eval (cons 'list x))
(1 2 3)