From 5fe8b9865cfbd7388b8f6355a73b1436d40cfb1e Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 22 Jul 2021 18:24:58 +0000 Subject: Make predicates private and static by default, and make them dynamic when using the dynamic/1 predicate --- loader.pl | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'loader.pl') diff --git a/loader.pl b/loader.pl index 9126c1f..69fc2f9 100644 --- a/loader.pl +++ b/loader.pl @@ -70,8 +70,20 @@ handle_clause(Head, Body, Singletons, Module) :- functor(Head, Name, Arity), PredicateIndicator = Name / Arity, warn_singletons(PredicateIndicator, Singletons), - Module:assertz(Head :- Body). + Module:'$insert_clause'(Head :- Body). +handle_directive(dynamic(PI), Module, Module) :- + is_nonvar(PI), + ( list(PI) + -> [First|Rest] = PI, + handle_directive(dynamic(First), Module, Module), + handle_directive(dynamic(Rest), Module, Module) + ; is_predicate_indicator(PI), + Name / Arity = PI, + functor(Tmp, Name, Arity), + Module:asserta(Tmp), + Module:retract(Tmp) + ). handle_directive(op(Priority, Specifier, Operator), Module, Module) :- Module:op(Priority, Specifier, Operator). handle_directive(include(F), Module, NewModule) :- -- cgit v1.2.3