]> Repositorios git - scryer-prolog.git/commitdiff
FIXED: enforce equality also for ground elements in tuples
authorMarkus Triska <[email protected]>
Tue, 11 Apr 2023 20:31:09 +0000 (22:31 +0200)
committerMarkus Triska <[email protected]>
Tue, 11 Apr 2023 20:33:19 +0000 (22:33 +0200)
Example:

    ?- tuples_in([[A,B]], [[1,2],[3,4]]),
       tuples_in([[A,B]], [[3,2]]).
       false.

See https://github.com/SWI-Prolog/swipl-devel/issues/1160.

src/lib/clpz.pl

index daed1471b8ac1aa0b225e75fcab2348f44f1c948..0e42bd9265fa2f4394d4e95cf35a3f1b3d3212cc 100644 (file)
@@ -4357,14 +4357,14 @@ list_first_rest([L|Ls], L, Ls).
 tuple_domain([], _) --> [].
 tuple_domain([T|Ts], Relation0) -->
         { maplist(list_first_rest, Relation0, Firsts, Relation1) },
-        (   var(T) ->
-            (   Firsts = [Unique] -> T = Unique
-            ;   { list_to_domain(Firsts, FDom),
+        (   Firsts = [Unique] -> T = Unique
+        ;   (   var(T) ->
+                { list_to_domain(Firsts, FDom),
                   fd_get(T, TDom, TPs),
                   domains_intersection(TDom, FDom, TDom1) },
                 fd_put(T, TDom1, TPs)
+            ;   []
             )
-        ;   []
         ),
         tuple_domain(Ts, Relation1).