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

时间:2013-09-02 20:41:22

标签: clojure

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

(+ 1 2 3) ; 6

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

(+ (+ 1 2) 3) => (+ 3 3) => 6

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

(< 1 2 3) ; true

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

(< 1 2 3) => (< (< 1 2) 3) => (< true 3) ; bad!

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

(< 1 2 3 4) => (and (< 1 2) (< 2 3) (< 3 4))

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

2 个答案:

答案 0 :(得分:5)

阅读the documentation

  

如果nums以单调递增的顺序返回非nil,   否则是假的。

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

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

([x y & more]
   (if (< x y)
     (if (next more)
       (recur y (first more) (next more))
       (< y (first more)))
     false)))

答案 1 :(得分:2)

请阅读文档:

“如果nums以单调递增的顺序返回非零值, 否则是假的。“