2013-03-31 10 views
1

core.logic의 project은 관계형이 아니라는 것을 알고 있습니다.두 방향으로 투영하면 core.logic에서 관계형으로 계산됩니까?

그러나, 내가, conda 내부 양쪽 방향으로 투영하여 관계형 같은 동작을 얻을 수있는 것으로 보인다 예컨대 :

(defn lifto-with-inverse 
    "Lifts a unary function and its inverse into a core.logic relation." 
    ([f g] 
    (fn [& vs] 
     (let [[x y] vs] 
     (conda 
      [(pred x number?) (project [x] (== y (f x)))] 
      [(pred y number?) (project [y] (== x (g y)))]))))) 

(let [inco (lifto-with-inverse inc dec)] 
    (run* [q] (inco q 3))) 
=> 2 

합니까 관계형 작업으로이 계산? 아니면이 관계형이 아닌 다른 것이 있습니까?

답변

2

이 경우에도 인수 중 하나가 비 관계형으로 만들어야합니다.