문제

내 목록에 일련의 테스트를 적용하고 모든 테스트가 통과되었는지 확인하고 싶습니다. Clojure에 "andmap"과 비슷한 기능이 있습니까?

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 every?:

user=> (every? string? '("hi" 1))
false

다음은 문서입니다 every?.

다른 팁

Clojure 1.3은 모든 예를 들어 (및 "또는"버전의 관련 일부 FN)을 추가합니다.

Clojure.core/Every-Pred ([P] [P1 P2] [P1 P2 P3] [P1 P2 P3 & PS])

일련의 홍보 세트를 가져 와서 모든 작곡가의 모든 인수에 대해 논리적 진정한 값을 반환하는 경우 true를 반환하는 함수 F를 반환합니다. 그렇지 않으면 거짓을 반환합니다. F는 원래의 곤경에 대한 논리적 허위 결과를 유발하는 첫 번째 인수에서 실행을 중단한다는 점에서 단락입니다.

순진한 구현은 다음과 같습니다.

(Every-Pred [& preds] (fn [& args] (모든? #(모든? % args) preds))))))

그러나 실제 구현은 성능이 향상됩니다.

나는 썼다 andmap 인수로 홍보를 취하고 "랩핑하는 함수를 구축하는 매크로로서 and Predicates 주변 ", 즉, 즉

(andmap integer? odd?) 
==>
(fn [x] (and (integer? x)
             (odd? x)))

(확장되지 않습니다 바로 그거죠 이것은하지만 이것과 동등한 것으로 확장됩니다)

이것은 Predicates에 대한 단축이 이점이 있으므로 글을 쓸 수 있습니다.

(every? (andmap integer? odd?) [1 3 "a string"])

런타임 예외를 얻지 않고 Arthurs 대답.

여기에 정의가 있습니다 andmap:

(defmacro andmap 
  ([]       `(fn [& x#] true))
  ([p & ps] `(fn [& x#] (and (apply ~p x#)
                             (apply (andmap ~@ps) x#)))))

정의 할 수도 있습니다 andmap 게으름으로 인한 사전 회로에 대한 단락 된 기능으로 :

(defn andmap [& ps]
  (fn [& x]
    (every? true? (map (fn [p] (apply p x)) ps))))

ANDMAP에 대한 Predicates는 임의의 인수 수를 취할 수 있으므로 쓸 수 있습니다.

(map (andmap #(and (integer? %1)
                   (integer? %2))
             #(and (odd? %1)
                   (even? %2))
             <)
     [1 3 9]
     [2 6 "string"])

평가합니다 (true true false).

every? "이 기능이 SEQ의 각 구성원에 대해 진실한 것으로 반환 되나요"라고 묻습니다. 개선 every? 함수 목록을 가져 와서 "이 seq의 모든 구성원에 대해이 모든 것이 사실입니다"라고 묻습니다.

첫 번째 시도는 다음과 같습니다.

(defn andmap? [data tests]
  (every? true? (for [d data, f tests]
                  (f d))))

user> (andmap? '(2 4 8) [even? pos?])
true
user> (andmap? '(2 4 8) [even? odd?])
false
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top