2010-08-22 44 views
1

我试图从交错列表创建映射并运行错误。这是我在做什么:Var clojure.core/unquote-splicing在将列表元素传递给哈希映射时出现未绑定错误

(interleave ['a 'b] [1 2]) 

给出了列表(a 1 b 2)。

如果我想创建从一堆元素的哈希地图,我可以做

(hash-map 'a 1 'b 2) 

结合两者结合起来,

(hash-map [email protected](interleave ['a 'b] [1 2])) 

我得到这个错误:

java.lang.IllegalStateException: Var clojure.core/unquote-splicing is unbound. (repl-1:2) 

如何将列表元素传递给哈希映射?

回答

6

您需要使用apply

(apply hash-map (interleave ['a 'b] [1 2])) 

apply适用于参数的序列的功能;请在REPL处输入(doc apply)以了解详细信息。

[email protected]是两个同伴的一个语法引号,写成反引号,另一个是~

`(~(+ 1 2) [email protected][2 1]) 
; => (3 2 1) 

三是有用的多为编写宏;在syntax-quote之外不能使用~[email protected]