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
为什么Clojure中带有conj的列表需要撇号?_Clojure - Fatal编程技术网

为什么Clojure中带有conj的列表需要撇号?

为什么Clojure中带有conj的列表需要撇号?,clojure,Clojure,在Close中,如果运行以下代码: (conj (1 2 3) 4) 它会出错并说: ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn 但是,如果在列表前面加一个撇号,就可以了 (conj '(1 2 3) 4) 我的问题是,这个撇号到底是做什么的,为什么这个列表需要它 我注意到,当你使用向量时,这种情况不会发生 (conj [1 2 3] 4) 事实上,即使使用撇号(conj'[1 2 3]),它仍

在Close中,如果运行以下代码:

(conj (1 2 3) 4)
它会出错并说:

ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn
但是,如果在列表前面加一个撇号,就可以了

(conj '(1 2 3) 4)
我的问题是,这个撇号到底是做什么的,为什么这个列表需要它

我注意到,当你使用向量时,这种情况不会发生

(conj [1 2 3] 4)
事实上,即使使用撇号
(conj'[1 2 3])
,它仍然可以正常工作并返回相同的结果


撇号到底是做什么的?为什么列表需要撇号,而向量不需要撇号?(抱歉,如果这是一个初学者/愚蠢的问题,我还在学习中。如果能给出一个完整的答案,我将不胜感激)

列表
(括号)和
向量
(括号)之间有一个根本的区别,列表用于函数调用,向量只是向量文字

撇号是的读取器宏,用于抑制求值。例如,从源文件读入时,
(+12)
计算为3,但
(+12)
作为
列表读入,或者,符合代码思想的是lisp中的数据。另一方面,引用向量本身就是一个简单的例子


因此,在您的情况下,
(conj(1 2 3)4)
读入时,它将尝试调用名为
1
的函数,并带有参数
2
3
,难怪它失败了。但是引用的列表或向量可以附加一个额外的元素。

Try
'[1 2 x]
可能与
x
变量重复,这会有所不同