|Did you know ...||Search Documentation:|
|ERROR: No permission to modify static_procedure Name/Arity|
Normally, compiled code results in static predicates. These cannot be modified at runtime. Knowing code is static helps the compiler. If you want to make dynamic code, i.e., code that can be modified ar runtime, use the dynamic/1 directive. Normally you place this directive near the start of a file or just above the code:
:- dynamic arc/2. arc(a, b). arc(a, c). ...
Generally it is not a very good idea to load dynamic data as program data. If some rule depends partly on static data and partly on dynamic define them as separate predicates and write a predicate combining the two types of data properly:
:- dynamic user_arc/2. arc(A, B) :- user_arc(A, B). arc(A, B) :- predefined_arc(A, B). predefined_arc(a, b). ...
The predicate abolish/1 deletes all traces of a predicate from the program: its clauses, its attributes (dynamic, multifile, meta) and its source-information. Normally you just want to delete the clauses, so you use retractall/1, e.g.:
See also ReadDynamicFromFile