1つの値に2つ(またはそれ以上)の述語を適用したいとします。それをしないが、私は適用述語を構成したい場合はどのようなclojureで2つ以上の述語をどのように作成しますか?
(defn posint? [n]
(and (integer? n) (pos? n)))
:たとえば、私は値が正の整数であるかどうかをテストしたいと言いますか?私は述語の可能な組み合わせごとに関数を書いたくありません。
1つの値に2つ(またはそれ以上)の述語を適用したいとします。それをしないが、私は適用述語を構成したい場合はどのようなclojureで2つ以上の述語をどのように作成しますか?
(defn posint? [n]
(and (integer? n) (pos? n)))
:たとえば、私は値が正の整数であるかどうかをテストしたいと言いますか?私は述語の可能な組み合わせごとに関数を書いたくありません。
だけでこれを行うにevery-pred
と呼ばれる組み込み関数が実際にそこにあるのClojure 1.3で。 hereを参照してください。
(defn posint? [n]
((every-pred integer? pos?) n))
これらのチェックをインラインで実行する場合は、次のようなものがあります。
(defn predicate-test [fns t]
"test all predicates against value t and return true iff all predicates return true."
(every? true? ((apply juxt fns) t)))
(predicate-test [integer? pos?] 4)
あなたは、あなたの最も使用される述語のテストのためにという名前のバージョンを作成することができます。
(def posint? (partial predicate-test [integer? pos?])
(posint? 4)
これは '(posint?" a ")'!私は残念ながら1.2解決策が必要です。 – stand
@stand:Clojureのソースからこの機能を利用してコードに入れることができると思います –