Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将列表元素传递到哈希映射时,Var clojure.core/unquote-splicting是未绑定错误_Clojure - Fatal编程技术网

将列表元素传递到哈希映射时,Var clojure.core/unquote-splicting是未绑定错误

将列表元素传递到哈希映射时,Var clojure.core/unquote-splicting是未绑定错误,clojure,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

我试图从交错列表创建一个映射,但遇到了错误。以下是我正在做的:

(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)

如何将列表中的元素传递到哈希映射?

您需要使用
apply

(apply hash-map (interleave ['a 'b] [1 2]))
apply
将函数应用于一系列参数;有关详细信息,请在REPL处键入
(文件适用)

~@
是语法引号的两个同伴之一,写为backtick,另一个是
~

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

这三个函数主要用于编写宏;您不能在语法quote之外使用
~
~@

您需要使用
apply

(apply hash-map (interleave ['a 'b] [1 2]))
apply
将函数应用于一系列参数;有关详细信息,请在REPL处键入
(文件适用)

~@
是语法引号的两个同伴之一,写为backtick,另一个是
~

`(~(+ 1 2) ~@[2 1])
; => (3 2 1)
这三个函数主要用于编写宏;不能在quote语法之外使用
~
~@