From fb298305210ba08c51b3411bb4a36ec1a16811d2 Mon Sep 17 00:00:00 2001 From: Paulo Moura Date: Wed, 12 May 2021 23:46:05 +0100 Subject: [PATCH 1/2] Fix retractall/1 predicate to retract both facts and rules --- src/lib/builtins.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index d96e0a16..89a50e7d 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -1016,7 +1016,7 @@ retract(Clause) :- :- meta_predicate retractall(0). retractall(Head) :- - retract((Head :- _)), + retract_clause(Head, _), false. retractall(_). From 88a2cfc5e1e92601d37f93343c79de519f3013d3 Mon Sep 17 00:00:00 2001 From: Paulo Moura Date: Wed, 12 May 2021 23:48:12 +0100 Subject: [PATCH 2/2] Fix retract_clause/2 internal predicate to correctly handle module qualification and no lose body bindings --- src/lib/builtins.pl | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index 89a50e7d..a8703dcd 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -985,13 +985,8 @@ retract_clause(Head, Body) :- ( Name == (:), Arity =:= 2 -> arg(1, Head, Module), - arg(2, Head, HeadAndBody), - ( HeadAndBody = (F :- Body1) -> - true - ; F = HeadAndBody, - Body1 = true - ), - retract_module_clause(F, Body1, Module) + arg(2, Head, Head1), + retract_module_clause(Head1, Body, Module) ; '$no_such_predicate'(user, Head) -> '$fail' ; '$head_is_dynamic'(user, Head) ->