Welcome! Please see the About page for a little more info on how this works.

0 votes
in core.logic by

Here are two examples using fixc:

`
(run* [q]
(fresh [x y]

(fixc [x y]
  (fn [[x y] a _] (!= x 1))
  (fn [[x y] a] (= (walk a x) (walk a y)))
  '...)
(== x y)))

(run* [q]
(fresh [x y c d]

(fixc [x y]
  (fn [[x y] a _] (!= x y))
  (fn [[x y] a] (or (not (lvar? (walk a x))) (not (lvar? (walk a y)))))
  '...)
(== [x y] [[c] [d]])))

`

The constraint != is reified twice in each example, showing that the fixc constraint indeed ran twice.

3 Answers

0 votes
by

Comment made by: dnolen

For the first example I see the following as a result on master:

((_0 :- (!= (_1 1))))

Is this what you're seeing? As x isn't even part of the answer I wonder if we should show these constraints?

0 votes
by

Comment made by: namin

I changed the reifier by setifying the set of constraints, hence you get only one result now. So my illustration is now out-of-date but the problem remains. It's a separate issue to filter out irrelevant constraints, and I agree it should be done (I try to do it for the nominal constraints).

0 votes
by
Reference: https://clojure.atlassian.net/browse/LOGIC-117 (reported by namin)
...