我想将两个(或更多)谓词应用于单个值.例如,假设我想测试一个值是否为正整数:
(defn posint? [n]
(and (integer? n) (pos? n)))
Run Code Online (Sandbox Code Playgroud)
这样做,但如果我想组成应用的谓词怎么办?我不想为每个可能的谓词组合编写函数.
Jul*_*ang 21
在Clojure 1.3中,实际上有一个内置函数every-pred可以做到这一点.看到这里.
(defn posint? [n]
((every-pred integer? pos?) n))
Run Code Online (Sandbox Code Playgroud)
如果您想将它们组合成and关系,请使用every-pred:
((every-pred pos? even?) 5)
;false
((every-pred pos? even?) 6)
;true
((every-pred pos? even?) -2)
;false
Run Code Online (Sandbox Code Playgroud)
如果您想将它们组合成or关系,请使用some-fn:
((some-fn pos? even?) 5)
;true
((some-fn pos? even?) 6)
;true
((some-fn pos? even?) -2)
;true
((some-fn pos? even?) -3)
;false
Run Code Online (Sandbox Code Playgroud)