built-in predicate



threaded_engine_create(AnswerTemplate, Goal, Engine)

Creates a new engine for proving the given goal and defines an answer template for retrieving the goal solution bindings. A message queue for passing arbitrary terms to the engine is also created. If the name for the engine is not given, a unique name is generated and returned. Engine names shall be regarded as opaque terms; users shall not rely on its type.


This predicate requires a backend Prolog compiler providing compatible multi-threading primitives. The value of the read-only engines flag is set to supported when that is the case.

Meta-predicate template

threaded_engine_create(*, 0, *)

Modes and number of proofs

threaded_engine_create(@term, @callable, @nonvar) - one
threaded_engine_create(@term, @callable, --nonvar) - one


Goal is a variable:
Goal is neither a variable nor a callable term:
type_error(callable, Goal)
Engine is the name of an existing engine:
permission_error(create, engine, Engine)


% create a new engine for finding members of a list:
| ?- threaded_engine_create(X, member(X, [1,2,3]), worker_1).