[ Dynamic Predicates | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]
assert(+Clause)
Add specified clause at the end of the dynamic procedure to the database.
- +Clause
- Atom or compound term
Description
Adds the specified clause for a dynamic procedure to the database. The
clause is added AFTER any existing clauses for the procedure.
The procedure must be declared to be dynamic using the dynamic/1
built-in. If the procedure is undefined an exception is raised.
However, the default error handler for this exception simply declares
the procedure dynamic and asserts the clause.
The asserted clause is NOT removed from the database on backtracking
through the call to assert/1.
assert/1 satisfies the logical update semantics. Asserting a clause to
a procedure will not, in any way, affect previous calls to it when
backtracking.
Fail Conditions
None
Resatisfiable
No
Exceptions
- (4) instantiation fault
- Clause is a free variable.
- (4) instantiation fault
- The head of Clause is a free variable.
- (5) type error
- Clause is not a valid Prolog clause.
- (63) procedure not dynamic
- The procedure is not dynamic.
- (70) accessing an undefined dynamic procedure
- The procedure is undefined. However, the default error handler for this exception simply declares the procedure dynamic and asserts the clause, if the error was caused by an assert.
Examples
Success:
assert(city(munich)).
assert((likes(X,Y):-man(X),woman(Y)).
Error:
assert(X). - gives error 4.
assert("the man"). - gives error 5.
assert(1). - gives error 5.
assert((my_static(X):-write(X))). - gives error 63.
if my_static/1 is not
dynamic.
Logical semantics :
If the following clauses are in the database :
p :- assert(p), fail.
p :- fail.
q :- fail.
q :- assert(q), fail.
The queries p. and q. will both fail.
See Also
dynamic / 1, asserta / 1, retract / 1, compile_term / 1