在两个方向上进行投影在core.logic中算作关系吗?

时间:2013-03-31 06:44:54

标签: clojure logic-programming clojure-core.logic minikanren

我知道core.logic中的project不是关系型的。

然而,似乎我可以通过在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

这是否算作关系操作?或者是否还有其他缺失使得这种非关系性的?

1 个答案:

答案 0 :(得分:3)

在这种情况下,似乎还必须考虑其中一个论点,使其成为非关系型的。