2

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

(+ 1 2 3) ; 6

我了解它的处理方式(在参数列表中类似于减少):

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

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

(< 1 2 3) ; true

但是现在我不明白 Clojure 是如何处理它的。它不能像上面的示例那样,因为 (< 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 是否区分这些情况?

4

2 回答 2

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)))
于 2013-09-02T20:47:36.670 回答
2

只需阅读文档:

“如果 nums 是单调递增的,则返回非 nil,否则返回 false。”

于 2013-09-02T20:44:16.260 回答