在将列表元素传递给hash-map时,var clojure.core / unquote-splicing是未绑定的错误

时间:2010-08-22 07:40:20

标签: clojure

我正在尝试从交错列表创建一个映射并遇到错误。这就是我在做的事情:

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

给出列表(a 1 b 2)。

如果我想从一堆元素创建一个哈希映射,我可以做

(hash-map 'a 1 'b 2)

将两者结合起来,

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

我收到此错误:

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

如何将列表元素传递给hash-map?

1 个答案:

答案 0 :(得分:6)

您需要使用apply

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

apply将函数应用于seq参数;在REPL中键入(doc apply)以获取详细信息。

~@是syntax-quote的两个伴随之一,写为反引号,另一个是~

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

这三个主要用于编写宏;您不能在syntax-quote之外使用~~@