]> Repositorios git - scryer-prolog.git/commitdiff
correct verify_attributes/3 for variables that have no CLP(ℤ) attribute attached...
authorMarkus Triska <[email protected]>
Thu, 30 Apr 2020 16:10:09 +0000 (18:10 +0200)
committerMarkus Triska <[email protected]>
Thu, 30 Apr 2020 16:10:09 +0000 (18:10 +0200)
Example:

    ?- freeze(B, queen_value_truth(C,N,B)), Q #= N #<==> B.
       clpz:(Q#=N#<==>B), clpz:(B in 0..1), freeze:freeze(B,queen_value_truth(C,N,B))
    ;  false.

src/prolog/lib/clpz.pl

index ebfbc54703aebe50b80ab81c1bfa41f721d8fc4d..0937d538f7323d537afb81b503b8c47185e6c2dd 100644 (file)
@@ -7371,7 +7371,8 @@ goals_entail(Goals, E) :-
 
 verify_attributes(Var, Other, Gs) :-
         % portray_clause(Var = Other),
-        (   get_attr(Var, clpz, clpz_attr(_,_,_,Dom,Ps,Q)) ->
+        (   get_atts(Var, clpz(CLPZ)) ->
+            CLPZ = clpz_attr(_,_,_,Dom,Ps,Q),
             (   nonvar(Other) ->
                 (   integer(Other) -> true
                 ;   type_error(integer, Other)
@@ -7379,14 +7380,17 @@ verify_attributes(Var, Other, Gs) :-
                 domain_contains(Dom, Other),
                 phrase(trigger_props(Ps), [Q], [_]),
                 Gs = [phrase(do_queue, [Q], _)]
-            ;   fd_get(Other, OD, OPs),
-                domains_intersection(OD, Dom, Dom1),
-                append_propagators(Ps, OPs, Ps1),
-                new_queue(Q0),
-                variables_same_queue([Var,Other]),
-                phrase((fd_put(Other,Dom1,Ps1),
-                        trigger_props(Ps1)), [Q0], _),
-                Gs = [phrase(do_queue, [Q0], _)]
+            ;   (   get_atts(Other, clpz(clpz_attr(_,_,_,OD,OPs,_))) ->
+                    domains_intersection(OD, Dom, Dom1),
+                    append_propagators(Ps, OPs, Ps1),
+                    new_queue(Q0),
+                    variables_same_queue([Var,Other]),
+                    phrase((fd_put(Other,Dom1,Ps1),
+                            trigger_props(Ps1)), [Q0], _),
+                    Gs = [phrase(do_queue, [Q0], _)]
+                ;   put_atts(Other, clpz(CLPZ)),
+                    Gs = []
+                )
             )
         ;   Gs = []
         ).