From: Mark Thom Date: Thu, 14 Apr 2022 02:31:16 +0000 (-0600) Subject: instantiate Module in definition of retract/1 (#1392) X-Git-Tag: v0.9.1~56 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=7595ec16e562007c186daccc52aef4c96fa26acb;p=scryer-prolog.git instantiate Module in definition of retract/1 (#1392) --- diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index 0c4746d0..b839ee5d 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -971,7 +971,8 @@ call_module_retract(Head, Body, Name, Arity, Module) :- retract_module_clause(Head, Body, Module) :- ( var(Head) -> throw(error(instantiation_error, retract/1)) - ; callable(Head), functor(Head, Name, Arity) -> + ; callable(Head), + functor(Head, Name, Arity) -> ( '$no_such_predicate'(Module, Head) -> '$fail' ; '$head_is_dynamic'(Module, Head) -> @@ -1012,7 +1013,8 @@ call_retract(Head, Body, Name, Arity) :- retract_clause(Head, Body) :- ( var(Head) -> throw(error(instantiation_error, retract/1)) - ; callable(Head), functor(Head, Name, Arity) -> + ; callable(Head), + functor(Head, Name, Arity) -> ( Name == (:), Arity =:= 2 -> arg(1, Head, Module), @@ -1032,7 +1034,10 @@ retract_clause(Head, Body) :- retract(Clause0) :- loader:strip_module(Clause0, Module, Clause), ( Clause \= (_ :- _) -> - Head = Clause, + loader:strip_module(Clause, Module, Head), + ( var(Module) -> Module = user + ; true + ), Body = true, retract_module_clause(Head, Body, Module) ; Clause = (Head :- Body) ->