Clojure 引证混乱

Clojure 引证混乱,clojure,Clojure,为什么这一系列clojure命令返回false而不是true?语句1“C”和语句2(引号C)的结果有什么区别 这个问题有点类似于Clojure(和其他Lisp)中的,是表单(引号…)的快捷方式。所以当Clojure看到这一点时: ('A 'B 'C) 读者将其“翻译”为: ((quote A) (quote B) (quote C)) 每个引号形式的计算结果都是一个符号,因此(引号a)计算结果是名为a的符号。在Clojure中,符号是函数,可以应用,因此((引号a)(引号B)(引号C))实际

为什么这一系列clojure命令返回false而不是true?语句1“C”和语句2(引号C)的结果有什么区别

这个问题有点类似于Clojure(和其他Lisp)中的,
是表单
(引号…)
的快捷方式。所以当Clojure看到这一点时:

('A 'B 'C)
读者将其“翻译”为:

((quote A) (quote B) (quote C))
每个引号形式的计算结果都是一个符号,因此
(引号a)
计算结果是名为a的符号。在Clojure中,符号是函数,可以应用,因此
((引号a)(引号B)(引号C))
实际上是一个函数调用。从文档中:

与关键字一样,符号使用可选的第二个参数(默认值)为一个参数(映射)的invoke()实现IFn。例如('mysym my hash map:none)与(get my hash map'mysym:none)的意思相同

因此,
C
是默认值,这就是它返回的原因

同时,

'('A 'B 'C)
被读者翻译成

(quote ((quote A) (quote B) (quote C)))
这实际上是一个由三个元素组成的列表,每个元素都是由两个元素组成的列表,一个是符号
quote
,另一个是符号(在本例中是
a
B
C

所以,
(last'('A'B'C))
实际上是
(quote C)
。这就是这两个结果之间的区别,
C
是名为C的符号,
(引号C)
是两个元素的列表

您可以确认这一点:

user=> (class ('A 'B 'C))
clojure.lang.Symbol
user=> (class (last '('A 'B 'C)))
clojure.lang.PersistentList
user=> 
希望这是清楚的

('x'y)非常不寻常,正是因为这个原因。通常需要'(xy),这是一个文本符号x和y的列表。如果你用“('x'y)”引用两次,你会得到一个带有(quote x)的列表:文字符号quote,后跟文字符号x。

你是说“Quoting Confujon”吗?
user=> (class ('A 'B 'C))
clojure.lang.Symbol
user=> (class (last '('A 'B 'C)))
clojure.lang.PersistentList
user=>