Author(s): The CLIP Group.
Version: 1.11#222 (2004/5/24, 13:8:7 CEST)
Version of last change: 1.11#75 (2003/12/19, 17:4:51 CET)
This module implements the assert/retract family of predicates to manipulate dynamic predicates.
The predicates defined in this module allow modification of the program as it is actually running. Clauses can be added to the program (asserted) or removed from the program (retracted). For these predicates, the argument which corresponds to the clause head must be instantiated to an atom or a compound term. The argument corresponding to the clause must be instantiated either to a term Head :- Body
or, if the body part is empty, to Head
. An empty body part is represented as true
. Note that using this library is very detrimental to global analysis, and that for most uses the predicates listed in section Fast/concurrent update of facts suffice.
dynamic
):- use_module(library(dynamic)).
dynamic
)
Meta-predicate with arguments: asserta(clause)
.
Usage: asserta(Clause)
* ISO *
Clause
is interpreted as a clause and is added to the current program. The predicate concerned must be dynamic. The new clause becomes the first clause for the predicate concerned. Any uninstantiated variables in Clause
will be replaced by new private variables.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
Meta-predicate with arguments: asserta(clause,?)
.
Usage: asserta(Clause, Ref)
asserta/1
. Ref
is a unique identifier of the asserted clause.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Ref
is a free variable.
(term_typing:var/1
)
basic_props:native/1
)
Meta-predicate with arguments: assertz(clause)
.
Usage: assertz(Clause)
* ISO *
asserta/1
, except that the new clause becomes the last clause for the predicate concerned.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
Meta-predicate with arguments: assertz(clause,?)
.
Usage: assertz(Clause, Ref)
assertz/1
. Ref
is a unique identifier of the asserted clause.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Ref
is a free variable.
(term_typing:var/1
)
basic_props:native/1
)
Meta-predicate with arguments: assert(clause)
.
Usage: assert(Clause)
assertz/1
. Included for compatibility.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
Meta-predicate with arguments: assert(clause,?)
.
Usage: assert(Clause, Ref)
assertz/2
. Included for compatibility.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Ref
is a free variable.
(term_typing:var/1
)
basic_props:native/1
)
Meta-predicate with arguments: retract(clause)
.
Usage: retract(Clause)
* ISO *
Clause
is erased. The predicate concerned must be dynamic.
The predicate retract/1
may be used in a non-determinate fashion, i.e., it will successively retract clauses matching the argument through backtracking. If reactivated by backtracking, invocations of the predicate whose clauses are being retracted will proceed unaffected by the retracts. This is also true for invocations of clause
for the same predicate. The space occupied by a retracted clause will be recovered when instances of the clause are no longer in use.
Clause
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
Meta-predicate with arguments: retractall(fact)
.
Usage: retractall(Head)
Head
, where Head
must be instantiated to an atom or a compound term. The predicate concerned must be dynamic. The predicate definition is retained.
Head
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
Meta-predicate with arguments: abolish(spec)
.
Usage: abolish(Spec)
* ISO *
Spec
. The predicate definition itself is also erased (the predicate is deemed undefined after execution of the abolish). The predicates concerned must all be user defined.
Spec
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
Meta-predicate with arguments: clause(fact,?)
.
Usage: clause(Head, Body)
* ISO *
Head
:-
Body
' exists in the current program. The predicate concerned must be dynamic.
Head
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
basic_props:native/1
)
clause(Head, Body, Ref)
Like clause(Head,Body)
, plus the clause is uniquely identified by Ref
.
Meta-predicate with arguments: clause(fact,?,?)
.
General properties:
basic_props:native/1
)
Usage 1: clause(Head, Body, Ref)
Head
must be instantiated to an atom or a compound term.
Head
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Usage 2: clause(Head, Body, Ref)
Ref
must be instantiated to a valid identifier.
Ref
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Usage: current_predicate(Spec)
* ISO *
Spec
.
basic_props:native/1
)
Usage: current_predicate(Spec, Module)
Module
is named Spec
. Module
never is an engine module.
basic_props:native/1
)
dynamic Spec
Spec
is of the form F
/A
. The predicate named F
with arity A
is made
dynamic in the current module at runtime (useful for predicate names generated on-the-fly). If the predicate functor name F
is uninstatiated, a new, unique, predicate name is generated at runtime.
Usage: dynamic Spec
Spec
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
data Spec
Spec
is of the form F
/A
. The predicate named F
with arity A
is made
data in the current module at runtime (useful for predicate names generated on-the-fly). If the predicate functor name F
is uninstatiated, a new, unique, predicate name is generated at runtime.
Usage: data Spec
Spec
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
wellformed_body(BodyIn, Env, BodyOut)
BodyIn
is a well-formed clause body. BodyOut
is its counterpart with no single-variable meta-goals (i.e., with call(X)
for X
). Env
denotes if global cuts are admissible in BodyIn
(+
if they are, -
if they are not).
dynamic
)
do_on_abolish(Head)
A hook predicate which will be called when the definition of the predicate of Head
is abolished.
The predicate is multifile.
Go to the first, previous, next, last section, table of contents.