FIXED: enforce equality also for ground elements in tuples
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.
This commit is contained in:
@@ -4357,14 +4357,14 @@ list_first_rest([L|Ls], L, Ls).
|
|||||||
tuple_domain([], _) --> [].
|
tuple_domain([], _) --> [].
|
||||||
tuple_domain([T|Ts], Relation0) -->
|
tuple_domain([T|Ts], Relation0) -->
|
||||||
{ maplist(list_first_rest, Relation0, Firsts, Relation1) },
|
{ maplist(list_first_rest, Relation0, Firsts, Relation1) },
|
||||||
( var(T) ->
|
|
||||||
( Firsts = [Unique] -> T = Unique
|
( Firsts = [Unique] -> T = Unique
|
||||||
; { list_to_domain(Firsts, FDom),
|
; ( var(T) ->
|
||||||
|
{ list_to_domain(Firsts, FDom),
|
||||||
fd_get(T, TDom, TPs),
|
fd_get(T, TDom, TPs),
|
||||||
domains_intersection(TDom, FDom, TDom1) },
|
domains_intersection(TDom, FDom, TDom1) },
|
||||||
fd_put(T, TDom1, TPs)
|
fd_put(T, TDom1, TPs)
|
||||||
)
|
|
||||||
; []
|
; []
|
||||||
|
)
|
||||||
),
|
),
|
||||||
tuple_domain(Ts, Relation1).
|
tuple_domain(Ts, Relation1).
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user