Clojure的逻辑and
与正常的逻辑and
(&&)有什么不同?为什么这会产生真实
((and odd? #(> 10 %)) 6)
Run Code Online (Sandbox Code Playgroud)
并不and
需要真正的2个语句返回true?
and
不一定回来true
.它实际上返回false
或者nil
如果任何给定元素是false
或nil
.如果它们都不是,那么它返回最后一个元素(它不返回true).
在你的情况下,and
返回函数#(> 10 %)
(没有别的),然后应用于该函数6
,产生true.这是因为这两个函数都不nil
是false
.这是步骤的工作方式:
((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
.