【发布时间】:2013-03-31 06:44:54
【问题描述】:
我了解 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
这算作关系操作吗?或者是否缺少其他东西使这与非关系无关?
【问题讨论】:
标签: clojure logic-programming clojure-core.logic minikanren