Module assume

Clauses and attribute variable hooks are identified by their reference data type. The predicates deposita_ref/1 respectively depositz_ref/1 will assume the given clause or hook for the duration of the continuation, whereas the predicate withdrawa_ref/1 respectively withdrawz_ref/1 will retire the given clause or hook for the duration of the continuation.

Example:
hook(V, T) :- 
   write('bind '), write(V),
   write(' to '), write(T), nl.

?- sys_ensure_hook(X, hook), X = 99.
bind _A to 99
X = 99.

The predicate sys_ensure_hook/2 takes care of the compilation of a hook into a hook refer-ence in case the hook is not yet associated with an attribute variable for the duration of the continuation. The variant sys_ensure_hook/3 does the same job during the execution of the given goal.

The predicate sys_assume_cont/1 temporarily pushes the given goal on the continuation queue. For more information on the continuation queue see the module cont.

The following assumption toolbox predicates are provided:

deposita_ref(R):
The predicate temporarily inserts the clause or hook referenced by R at the top for the duration of the continuation.
depositz_ref(R):
The predicate temporarily inserts the clause or hook referenced by R at the bottom for the duration of the continuation.
withdrawa_ref(R):
The predicate temporarily removes the clause or hook referenced by R for the duration of the continuation. The undo will happen at the top.
withdrawz_ref(R):
The predicate temporarily removes the clause or hook referenced by R for the duration of the continuation. The undo will happen at the bottom.
sys_ensure_hook(A, H, G):
The predicate temporarily ensures that the hook H is in the hook list of the attribute variable A for the duration of the goal G and succeeds whenever G succeeds.
sys_ensure_hook(A, H):
The predicate temporarily ensures that the hook H is in the hook list of the attribute variable A for the duration of the continuation.
sys_assume_cont(G):
The predicate temporarily pushes the goal G on the continuation queue.

Comments