Clojure:将多个参数视为<和+

dem*_*emi 2 clojure

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

(+ 1 2 3) ; 6
Run Code Online (Sandbox Code Playgroud)

我理解它是如何处理的(在参数列表中减少类似):

(+ (+ 1 2) 3) => (+ 3 3) => 6
Run Code Online (Sandbox Code Playgroud)

让我们考虑关系,比如,<= =等:

(< 1 2 3) ; true
Run Code Online (Sandbox Code Playgroud)

但现在我不明白Clojure是如何对待它的.它不像上面的示例,因为(<1 2)是布尔值,并且与整数的比较是没有意义的:

(< 1 2 3) => (< (< 1 2) 3) => (< true 3) ; bad!
Run Code Online (Sandbox Code Playgroud)

这是不正确的.如果是关系,应该隐藏and在内部:

(< 1 2 3 4) => (and (< 1 2) (< 2 3) (< 3 4))
Run Code Online (Sandbox Code Playgroud)

这是问题所在.他们是如何对待的?我的意思是,对我来说,就像没有统一的功能处理(arg list基本上减少了这个功能)和比较.Clojure是否区分了这些案例?

Fra*_*ila 5

阅读文档

如果nums以单调递增的顺序返回非nil,否则返回false.

同样,>nums必须按单调递减顺序.

如果您阅读了源代码(从文档链接),您会发现它等同于您的"隐藏and"

([x y & more]
   (if (< x y)
     (if (next more)
       (recur y (first more) (next more))
       (< y (first more)))
     false)))
Run Code Online (Sandbox Code Playgroud)