built-in predicate
threaded_peek/1-2
ï
Descriptionï
threaded_peek(Goal)
threaded_peek(Goal, Tag)
Checks if the result of proving Goal
in a new thread is already
available. This call succeeds or fails without blocking execution
waiting for a reply to be available. When there is no thread proving
the goal, the predicate generates an exception.
The argument of this predicate should be a variant of the argument of
the corresponding threaded_call/1
or threaded_once/1 call.
When the predicate argument is subsumed by the threaded_call/1
or
threaded_once/1
call argument, the threaded_peek/1
call will
succeed iff its argument unifies with an already available solution of
the (more general) goal.
The threaded_peek/2
variant accepts a threaded call identifier tag
generated by the calls to the threaded_call/2
and threaded_once/2 predicates. Tags
shall be regarded as an opaque term; users shall not rely on its type.
Note
This predicate requires a backend Prolog compiler providing
compatible multi-threading primitives. The value of the read-only
threads flag is set to supported
when that
is the case.
Modes and number of proofsï
threaded_peek(+callable) - zero_or_one
threaded_peek(+callable, +nonvar) - zero_or_one
Errorsï
Goal
is a variable:instantiation_error
Goal
is neither a variable nor a callable term:type_error(callable, Goal)
Goal
in the Object
calling context:existence_error(thread, Object)
Tag
is a variable:instantiation_error
Examplesï
threaded_peek(Goal)
threaded_peek(::Goal)
threaded_peek(Object::Goal)