{}/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_error
Term
is neither a variable nor a callable term:type_error(callable, Term)
Goal
is a variable:instantiation_error
Goal
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