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允许对多个参数应用二进制函数(每个二进制函数?),特别是+: (+ 1 2 3) ; 6 我理解它是如何处理的(如参数列表中的reduce): 让我们考虑一下关系,比如,P>只需阅读文档: 如果num是单调递增的,则返回非nil, 否则为假。”读取 如果num是单调递增的,则返回非nil, 否则就错了 同样地,对于NUM必须是单调递减顺序 如果您阅读源代码(从文档链接),您会看到它相当于您的“隐藏的和” ([x y&more] (如果(

Clojure允许对多个参数应用二进制函数(每个二进制函数?),特别是
+

(+ 1 2 3) ; 6
我理解它是如何处理的(如参数列表中的reduce):

让我们考虑一下关系,比如,P>只需阅读文档:

如果num是单调递增的,则返回非nil, 否则为假。”

读取

如果num是单调递增的,则返回非nil, 否则就错了

同样地,对于
NUM必须是单调递减顺序

如果您阅读源代码(从文档链接),您会看到它相当于您的“隐藏的

([x y&more]
(如果(
哦,我明白了。这不是编译器的特性,而是函数的特性。所以我错误地认为编译器可以自动完成它。相反,程序员应该提供一个重载,并按他认为正确的方式处理列表。
+
也是一个普通函数,而不是宏或特殊形式。它的multi-arg形式的代码是。我认为two-args->multi-args是编译器的魔法,但相反,它只是重载。这就是(source@Chiron这是我想说的+10的地方。我使用edit-run-file-loop而不是repl,我还不习惯这种类型的开发:)只是选择一个nit,+和<在clojure中不是二进制函数,+是0个或多个参数的函数,<是1个或多个参数的函数。
(+ (+ 1 2) 3) => (+ 3 3) => 6
(< 1 2 3) ; true
(< 1 2 3) => (< (< 1 2) 3) => (< true 3) ; bad!
(< 1 2 3 4) => (and (< 1 2) (< 2 3) (< 3 4))
([x y & more]
   (if (< x y)
     (if (next more)
       (recur y (first more) (next more))
       (< y (first more)))
     false)))