{Term} {Goal}
This control construct allows the programmer to bypass the Logtalk compiler. It can be used to wrap a source file term (either a clause or a directive) to bypass the term-expansion mechanism. Similarly, it can 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/2-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 the their identifiers correspond to predicates defined in user
.
{+callable}
instantiation_error
type_error(callable, Goal)
{:- load_foreign_resource(file)}. N1/D1 < N2/D2 :- {N1*D2 < N2*D1}. call_in_user(F, X, Y, Z) :- call({F}, X, Y, Z). | ?- {circle(Id, Radius, Color)}::area(Area). ... | ?- logtalk::{write('Hello world!'), nl}. Hello world! yes