From cb79e83510066c2ef14d96ff441d844869222f1e Mon Sep 17 00:00:00 2001 From: bakaq Date: Thu, 21 Sep 2023 14:00:37 -0300 Subject: [PATCH] Avoid dif/1 attribute with empty list Closes #1956 --- src/lib/dif.pl | 5 ++++- src/tests/dif.pl | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/dif.pl b/src/lib/dif.pl index 4fe35b80..fedb320c 100644 --- a/src/lib/dif.pl +++ b/src/lib/dif.pl @@ -35,7 +35,10 @@ vars_remove_goal([], _). vars_remove_goal([Var|Vars], Goal0) :- get_atts(Var, +dif(Goals0)), remove_goal(Goals0, Goal0, Goals), - put_atts(Var, +dif(Goals)), + ( Goals = [] -> + put_atts(Var, -dif(_)) + ; put_atts(Var, +dif(Goals)) + ), vars_remove_goal(Vars, Goal0). reinforce_goal(Goal0, Goal) :- diff --git a/src/tests/dif.pl b/src/tests/dif.pl index 752458b5..bb1c76d6 100644 --- a/src/tests/dif.pl +++ b/src/tests/dif.pl @@ -189,6 +189,13 @@ test("dif#12 but with multiple variables in the residuals",( Res = [] )). +% https://github.com/mthom/scryer-prolog/issues/1956 +test("scryer-prolog#1956",( + call_residue_vars((dif(a-a,X-_),X=b), Res), + X == b, + Res = [] +)). + main :- findall(test(Name, Goal), test(Name, Goal), Tests), run_tests(Tests, Failed), -- 2.54.0