[ Advanced Control and Suspensions | Reference Manual | Alphabetic Index ]
suspend(+Goal, +Prio, +CondList, -Susp)
Suspend the Goal and wake it with priority Prio as soon as one of the
conditions in CondList occurs.
- Goal
- A callable term.
- Prio
- An integer.
- CondList
- A term of the form Vars->Cond or trigger(Atom) or a list of such terms.
- Susp
- A free variable used to return the created suspension.
Description
The specified goal Goal is suspended, subject to the given trigger
conditions and priority, as with suspend/3. The only difference to
suspend/3 is that the Susp argument returns a handle for the created
suspension. This handle can, for example, be passed as an argument to
the suspended goal itself, which is useful for demon goals which need
to kill their own suspension under certain circumstances.
See suspend/3 for details of arguments and operation.
Modes and Determinism
- suspend(+, +, +, -) is det
Modules
This predicate is sensitive to its module context (tool predicate, see @/2).
Exceptions
- (6) out of range
- CondList is ill-formed.
Examples
[eclipse]: suspend(writeln(hello), 2, X->inst, Susp),
get_suspension_data(Susp, goal, Goal),
get_suspension_data(Susp, module, Module).
X = X
Goal = writeln(hello)
Susp = 'SUSP-_321-susp'
Module = eclipse
Delayed goals:
writeln(hello)
yes.
[eclipse]: suspend(writeln(hello), 2, X->inst, Susp),
kill_suspension(Susp), % killed before woken
X=1.
Susp = 'SUSP-_308-dead'
X = 1
yes.
% A demon that wakes whenever X becomes more constrained
report(X) :-
suspend(report(X, Susp), 1, X->constrained, Susp).
:- demon(report/2).
report(X, Susp) :-
( var(X) ->
writeln(constrained(X)) % implicitly re-suspend
;
writeln(instantiated(X)),
kill_suspension(Susp) % remove from the resolvent
).
See Also
demon / 1, make_suspension / 3, insert_suspension / 3, suspend / 3, attach_suspensions / 2