评估引用的表达式Clojure

时间:2012-08-17 23:38:12

标签: variables clojure

我很确定这个解决方案非常简单,但很难找到...... 所以,如果我

=> (def x '(1 (dec 3) 3))
;user/x

如何评估表达式以便

=> (***insert function here** x)
;(1 2 3)

到目前为止,unquote我得到(1 (dec 3) 3),这是没有引用的x,不是我想要的。我查看`~x会返回相同的结果。是否存在〜@和`的某些组合返回已评估的函数? (我在这里抛出功能,这些都不是限制)

如果可能,请尽量不要更改我原来的x定义。


好的,假设这个问题,表达式为'(list 1 (dec 3) 3) 现在我该如何检索

=> (***insert function here** x)
;(1 2 3)

是的,现在eval有效。感谢您添加重要的输入。

1 个答案:

答案 0 :(得分:2)

这可以通过在序列列表上映射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)