add call_residue_vars/2

This commit is contained in:
Mark Thom
2019-02-18 21:13:56 -07:00
parent a460e84c57
commit 2467f6c711
9 changed files with 122 additions and 45 deletions

View File

@@ -9,25 +9,27 @@ dif_set_variables([Var|Vars], X, Y) :-
put_atts(Var, dif(X, Y)),
dif_set_variables(Vars, X, Y).
verify_dif_attrs([dif(X, Y) | Attrs], Var, [X \== Y | Goals]) :-
( get_atts(Var, +dif(X, Y)) -> true
; put_atts(Var, +dif(X, Y))
verify_dif_attrs([dif(X, Y) | Attrs], Value, [X \== Y | Goals]) :-
( get_atts(Value, +dif(X, Y)) -> true
; put_atts(Value, +dif(X, Y))
),
verify_dif_attrs(Attrs, Var, Goals).
verify_dif_attrs([_ | Attrs], Var, Goals) :-
verify_dif_attrs(Attrs, Var, Goals).
verify_dif_attrs(Attrs, Value, Goals).
verify_dif_attrs([_ | Attrs], Value, Goals) :-
verify_dif_attrs(Attrs, Value, Goals).
verify_dif_attrs([], _, []).
verify_dif_attrs_no_var([dif(X, Y) | Attrs], [X \== Y | Goals]) :-
verify_dif_attrs_no_var(Attrs, Goals).
verify_dif_attrs_no_var([_ | Attrs], Goals) :-
verify_dif_attrs_no_var(Attrs, Goals).
verify_dif_attrs_no_var([], []).
verify_dif_attrs_no_var([dif(X, Y) | Attrs], Value, [X \== Y | Goals]) :-
term_variables(Value, ValueVars),
dif_set_variables(ValueVars, X, Y),
verify_dif_attrs_no_var(Attrs, Value, Goals).
verify_dif_attrs_no_var([_ | Attrs], Value, Goals) :-
verify_dif_attrs_no_var(Attrs, Value, Goals).
verify_dif_attrs_no_var([], _, []).
verify_attributes(Var, Value, Goals) :-
( get_atts(Var, Attrs) ->
( var(Value) -> verify_dif_attrs(Attrs, Value, Goals)
; verify_dif_attrs_no_var(Attrs, Goals)
; verify_dif_attrs_no_var(Attrs, Value, Goals)
)
).