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