{}/1
Description
{Term}
{Goal}
This control construct allows the programmer to bypass the Logtalk compiler.
It can also be used to wrap a source file term (either a clause or a directive)
to bypass the term-expansion mechanism. Similarly,
it can also be used to wrap a goal to bypass the goal-expansion mechanism. When
used to wrap a goal, it is opaque to cuts and the argument is called within
the context of the pseudo-object user. It is also possible
to use {Closure} as the first argument of call/1-N calls. In
this case, Closure will be extended with the remaining arguments of
the call/2-N call in order to construct a goal that will be called
within the context of user. It can also be used as a message to any
object. This is useful when the message is e.g. a conjunction of
messages, some of which being calls to Prolog built-in predicates.
This control construct may also be used in place of an object identifier
when sending a message. In this case, the result of proving its argument
as a goal (within the context of the pseudo-object user) is used as
an object identifier in the message sending call. This feature is mainly
used with parametric objects when their
identifiers correspond to predicates defined in user.
Modes and number of proofs
{+callable} - zero_or_more
Errors
Term is a variable:instantiation_errorTerm is neither a variable nor a callable term:type_error(callable, Term)Goal is a variable:instantiation_errorGoal is neither a variable nor a callable term:type_error(callable, Goal)Examples
% bypass the compiler for the next term:
{:- load_foreign_resource(file)}.
% overload the standard </2 operator:
N1/D1 < N2/D2 :-
{N1*D2 < N2*D1}.
% call a closure in the context of "user":
call_in_user(F, X, Y, Z) :-
call({F}, X, Y, Z).
% use parametric object proxies:
| ?- {circle(Id, Radius, Color)}::area(Area).
...
% use Prolog built-in predicates as messages:
| ?- logtalk::{write('hello world!'), nl}.
hello world!
yes