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是否区分了这些案例?
答案 0 :(得分:5)
如果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以单调递增的顺序返回非零值, 否则是假的。“