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_Clojure - Fatal编程技术网

[]和'之间有什么区别;[]在Clojure

[]和'之间有什么区别;[]在Clojure,clojure,Clojure,我最近一直在研究Clojure,我看到人们在不同的地方使用[]、'[]、()和'()。在某些情况下,[]和'[]是可互换的 所以我想知道这两个符号有什么不同 “是扩展到(引号)的读取器语法quote是一种特殊形式,表示“不要计算此表达式,而是将其视为文字。”例如,x计算为x的值,而'x计算为名称为“x”的符号 因此,”()扩展为(quote()),其计算结果为()。同样适用于[]。所以空列表和空向量没有区别 现在让我们考虑(x)< /代码>,这是(引用(x))< /代码>。计算结果为(x),这是

我最近一直在研究Clojure,我看到人们在不同的地方使用[]、'[]、()和'()。在某些情况下,[]和'[]是可互换的

所以我想知道这两个符号有什么不同

是扩展到
(引号)
的读取器语法
quote
是一种特殊形式,表示“不要计算此表达式,而是将其视为文字。”例如,
x
计算为
x
的值,而
'x
计算为名称为
“x”
的符号

因此,
”()
扩展为
(quote())
,其计算结果为
()
。同样适用于
[]
。所以空列表和空向量没有区别

现在让我们考虑<代码>(x)< /代码>,这是<代码>(引用(x))< /代码>。计算结果为

(x)
,这是一个包含符号
x
的文字列表。获得相同结果的另一种方法是计算
(list'x)
。相反,计算
(x)
调用(或尝试调用)绑定到
x
的函数


类似的论点适用于
'[x]
[x]
阅读主题
宏和
引用

简而言之,
是一个读卡器宏,可扩展为
(引号..)
因此,
“[]
等于
(引号[])

它的作用-它优先于评估(即此处未定义
a


不管是谁否决了这一点,请务必解释原因,因为我的理解基本相同,而且我的信息显然是错误的。我没有否决,但第三段是错误的(x) 计算结果为(x),而不是('x),即((引号x))。@leograpenthin-您是对的。我试图传达一个事实,那就是列表的内容被引用了,但我做得不太好。我会试着修改一下。是的,我想是这样的。很高兴您同意:)。我发现这很有帮助——来自Clojure编程p115:“am空列表不需要引用,因为没有第一项可以解释为可调用值”感谢您的评论!
user=> (quote [a])
[a]

user=> '[a]
[a]

; the following will fails since "a" is not bound
; there is no way to construct an array where the 
; first element is the value of a
user=> [a] 
CompilerException java.lang.RuntimeException: 
 Unable to resolve symbol: a in this context, 
 compiling:(NO_SOURCE_PATH:0:0)