Fix retract_clause/2 internal predicate to correctly handle module qualification and no lose body bindings

This commit is contained in:
Paulo Moura
2021-05-12 23:48:12 +01:00
parent fb29830521
commit 88a2cfc5e1

View File

@@ -985,13 +985,8 @@ retract_clause(Head, Body) :-
( Name == (:), ( Name == (:),
Arity =:= 2 -> Arity =:= 2 ->
arg(1, Head, Module), arg(1, Head, Module),
arg(2, Head, HeadAndBody), arg(2, Head, Head1),
( HeadAndBody = (F :- Body1) -> retract_module_clause(Head1, Body, Module)
true
; F = HeadAndBody,
Body1 = true
),
retract_module_clause(F, Body1, Module)
; '$no_such_predicate'(user, Head) -> ; '$no_such_predicate'(user, Head) ->
'$fail' '$fail'
; '$head_is_dynamic'(user, Head) -> ; '$head_is_dynamic'(user, Head) ->