From 504fe7b4cf8b252ef4930b5e324cfd7df157dbd7 Mon Sep 17 00:00:00 2001 From: Aaron Brooks Date: Fri, 21 Sep 2012 15:44:14 -0400 Subject: [PATCH] Fix unify-with-set to work symmetrically. Set unification would work with unmatched lvars in the first set but not unmatched values due to a missing condition. --- src/main/clojure/clojure/core/logic.clj | 2 +- src/test/clojure/clojure/core/logic/tests.clj | 5 +++++ 2 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/main/clojure/clojure/core/logic.clj b/src/main/clojure/clojure/core/logic.clj index 8eadf0e..627d758 100644 --- a/src/main/clojure/clojure/core/logic.clj +++ b/src/main/clojure/clojure/core/logic.clj @@ -1533,7 +1533,7 @@ (recur (disj u uf) v ulvars (conj umissing uf))))) nil) (if (seq v) - (if (seq ulvars) + (if (or (seq ulvars) (seq umissing)) (loop [v v vlvars [] vmissing []] (if (seq v) (let [vf (first v)] diff --git a/src/test/clojure/clojure/core/logic/tests.clj b/src/test/clojure/clojure/core/logic/tests.clj index e587a56..a1f5207 100644 --- a/src/test/clojure/clojure/core/logic/tests.clj +++ b/src/test/clojure/clojure/core/logic/tests.clj @@ -413,6 +413,11 @@ os (ext-no-check empty-s x 1)] (is (= (unify empty-s #{x} #{1}) os)))) +(deftest unify-set-set-3-5 + (let [x (lvar 'x) + os (ext-no-check empty-s x 1)] + (is (= (unify empty-s #{1} #{x}) os)))) + (deftest unify-set-set-4 (let [x (lvar 'x) y (lvar 'y) -- 1.7.5.4