From 167546f7ce72b8aeae86e67c00f2a83027caf19b Mon Sep 17 00:00:00 2001
From: Nada Amin <namin@alum.mit.edu>
Date: Fri, 4 Jan 2013 19:20:28 +0100
Subject: [PATCH] LOGIC-96: give up on "efficient" updatec in !=c for now,
 since it is buggy

---
 src/main/clojure/clojure/core/logic.clj       |    4 ++--
 src/test/clojure/clojure/core/logic/tests.clj |    9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/main/clojure/clojure/core/logic.clj b/src/main/clojure/clojure/core/logic.clj
index 8f0720d..2c6c822 100644
--- a/src/main/clojure/clojure/core/logic.clj
+++ b/src/main/clojure/clojure/core/logic.clj
@@ -3907,12 +3907,12 @@
                        (cond
                          (= xv vv) (recur (next sp) (dissoc p x))
                          (and (ground-term? xv a) (ground-term? vv a) (not= xv vv)) nil
-                         :else (recur (next sp) p)))
+                         :else (recur (next sp) (assoc (dissoc p x) xv vv))))
                      p))]
            (if p
              (when-not (empty? p)
                #_((normalize-store (with-prefix this p)) a)
-               ((updatecg (with-prefix this p)) a))
+               (bind* a (remcg this) (cgoal (!=c p))))
              ((remcg this) a))))
        ITreeConstraint
        (tree-constraint? [_] true)
diff --git a/src/test/clojure/clojure/core/logic/tests.clj b/src/test/clojure/clojure/core/logic/tests.clj
index 0a3028a..bb4f72b 100644
--- a/src/test/clojure/clojure/core/logic/tests.clj
+++ b/src/test/clojure/clojure/core/logic/tests.clj
@@ -965,6 +965,15 @@
              (== y 'foo)))
         ())))
 
+(deftest test-logic-96-disequality-1
+  (is (= (run* [q]
+           (fresh [x y z]
+             (!= x [y])
+             (== x [z])
+             (== y 'foo)
+             (== z 'bar)))
+        '(_0))))
+
 ;; -----------------------------------------------------------------------------
 ;; tabled
 
-- 
1.7.10.4

