단일 값에 두 (또는 그 이상)의 조건자를 적용하려고합니다. 그것을 않습니다,하지만 난이 적용되는 조건을 구성 할 경우 어떻게clojure에서 두 개 이상의 술어를 작성하는 방법은 무엇입니까?
(defn posint? [n]
(and (integer? n) (pos? n)))
예를 들어, 내가 값은 양의 정수의 경우 테스트하고 싶은 말은? 가능한 술어 조합마다 함수를 작성하고 싶지 않습니다.
단일 값에 두 (또는 그 이상)의 조건자를 적용하려고합니다. 그것을 않습니다,하지만 난이 적용되는 조건을 구성 할 경우 어떻게clojure에서 두 개 이상의 술어를 작성하는 방법은 무엇입니까?
(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 소스에서이 함수를 가져 와서 코드에 넣을 수 있다고 생각합니다. –