逻辑和在Clojure中

2 logic clojure

Clojure的逻辑and与正常的逻辑and(&&)有什么不同?为什么这会产生真实

((and odd? #(> 10 %)) 6)
Run Code Online (Sandbox Code Playgroud)

并不and需要真正的2个语句返回true?

Clo*_*tly 5

and不一定回来true.它实际上返回false或者nil如果任何给定元素是falsenil.如果它们都不是,那么它返回最后一个元素(它不返回true).

在你的情况下,and返回函数#(> 10 %)(没有别的),然后应用于该函数6,产生true.这是因为这两个函数都不nilfalse.这是步骤的工作方式:

((and odd? #(> 10 %)) 6)
(#(> 10 %) 6) 
;; => true
Run Code Online (Sandbox Code Playgroud)

你要找的是组合谓词函数:

((every-pred odd? #(> 10 %)) 6) ;; => false
Run Code Online (Sandbox Code Playgroud)

仅供参考:还有它的补充" or":some-fn.