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,为什么这个表达 ('+ 10 20) 评估为20?这对我来说真的很奇怪!我本来希望给出一个错误,因为列表的第一个元素,'+我不是一个可以计算的东西 这几乎是Clojure的常见问题,无论好坏。因此,“+是(quote+)的缩写,其计算结果为符号+。符号(和关键字)可以被视为函数并在其参数中查找,因此('+1020)本质上是(get 10'+20),这是未找到的数因此如果“collection”10不包含符号'+,那么它将返回第三个参数,20 您可能期望对10的关联查找失败并引发异常,但在Clo

为什么这个表达

('+ 10 20)

评估为
20
?这对我来说真的很奇怪!我本来希望给出一个错误,因为列表的第一个元素,
'+
我不是一个可以计算的东西

这几乎是Clojure的常见问题,无论好坏。因此,
“+
(quote+)
的缩写,其计算结果为符号
+
。符号(和关键字)可以被视为函数并在其参数中查找,因此
('+1020)
本质上是
(get 10'+20)
,这是
未找到的
因此如果“collection”
10
不包含符号
'+
,那么它将返回第三个参数,
20

您可能期望对
10
的关联查找失败并引发异常,但在Clojure中有很多情况下,查找将返回
nil
(或
未找到的版本),因为从
nil
双关的角度来看,这是有益的,并且是导致惯用Clojure的一部分

有些函数确实执行这种类型的参数检查:
(包含?10'+)
将抛出异常,例如,而
(get 10'+)
(get'+10)
都将返回
nil

可能还值得注意的是,以下内容引发了一个异常:

user=> ('+ 10 20 30)
Execution error (ArityException) at user/eval39476 (REPL:1).
Wrong number of args (3) passed to: clojure.lang.Symbol
您询问“clojure中引用了第一个参数的列表值是否是最后一个参数”,答案是否,这是一个非常明确的双参数函数调用,因为上面的逻辑:您不能用3个参数“调用”符号,只能用1或2

值得注意的是,0 args情况下的差异:

user=> ('+)
Execution error (ArityException) at user/eval39478 (REPL:1).
Wrong number of args (0) passed to: clojure.lang.Symbol
user=> (+)
0

第一种情况是符号查找——它至少需要一个集合来查找自己——而第二种情况是一个带有零参数的函数调用(
clojure.core/++
),它以与
(*)相同的方式返回
+
的标识值
返回
1

感谢您的详细解释。我不知道,谢谢!这很有帮助。这是否写在文档的某个地方(可能是常见问题部分?)官方文档: