Clojure 中的逻辑与

Logical AND in Clojure

Clojure的逻辑and和普通的逻辑and(&&)有区别吗?为什么这会产生 true

((and odd? #(> 10 %)) 6)

难道 and 不需要 2 个正确的语句才能 return 正确吗?

and 不一定 return true。如果任何给定元素是 falsenil,它实际上是 returns falsenil。如果其中 none 个是,那么它 return 是最后一个元素(它不是 return true)。

在您的情况下,and return 是函数 #(> 10 %)(仅此而已),然后应用于 6,结果为真。这是因为这两个函数既不是 nil 也不是 false。 以下是这些步骤的运作方式:

((and odd? #(> 10 %)) 6)
(#(> 10 %) 6) 
;; => true

您正在寻找的是组合谓词函数:

((every-pred odd? #(> 10 %)) 6) ;; => false

仅供参考:还有它的补充“or”:some-fn