목표가 하나의 매개 변수 만 사용하는 경우 everyg을 다른 대답에서 제안 된대로 사용할 수 있습니다. 기본적으로 (everyg g coll)은 골격 g이 coll의 각 요소에서 성공할 때 성공하는 목표입니다. 그러므로 coll은 목표의 집합이 아니라 g에 대한 단일 매개 변수의 집합입니다. project과 결합이 가능 작성할 수 있습니다, 때문에 여전히 도움 :
(defna apply-collg
[gcoll v]
([() _])
([[gh . gt] _] (applyg gh v) (apply-collg gt v)))
에서 목표를 만들기 위해 pred 사용 :
(defn applyg
[g v]
"Goal that succeeds when the goal g applied to v succeeds.
Non-relational as g must be ground."
(project [g] (everyg g [v])))
을 그리고 적용 할 목표의 모음이있는 경우
(run* [q] (apply-collg [#(pred % pos?) #(pred % odd?)] 1))
=> (_0)
(run* [q] (apply-collg [#(pred % pos?) #(pred % odd?)] 2))
=>()
목표는 다음 중 하나가 바로 복용 목표로 변환 할 필요가 2 개 이상의 매개 변수를 적용 할 경우 : Clojure의 술어, 그것은 테스트를 용이하게 매개 변수의 단일 모음.
저는 아직 core.logic이 새롭기 때문에 의견을 환영합니다.
감사합니다. 나는 내 대답에 대해 확신하지 못했습니다. –