{}/1 — The Logtalk Handbook v3.47.0 documentation

# `{}/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