Logtalk reference manual
Built-in method: call/1-N
Contents > Reference Manual > Built-in Methods > call/1-N

## call/1-N

#### Description

    call(Goal)
    call(Closure, Arg1, ...)
    call(Object::Closure, Arg1, ...)
    call(::Closure, Arg1, ...)

Calls a goal, which might be constructed by appending additional arguments to a closure. The upper limit for `N` depends on the upper limit for the arity of a compound term of the back-end Prolog compiler. This built-in meta-predicate is declared as a private method and thus cannot be used as a message to an object. When using a back-end Prolog compiler supporting a module system, calls in the format `call(Module:Closure, Arg1, ...)` may also be used.

Note that `::Closure` closures are only supported for local meta-calls. Passing this kind of closure as an argument of a meta-predicate called using message sending is not supported and always fails as the value of self is lost in the round-trip to the object defining the meta-predicate. The workaround is to simply call the `self(Self)` built-in method and use the returned value with a `Self::Closure` closure instead.

#### Template and modes

    call(+callable)
    call(+callable, ?term)
    call(+callable, ?term, ?term)
    ...

#### Errors

Goal is a variable:
  `instantiation_error`
Goal is neither a variable nor a callable term:
  `type_error(callable, Goal)`
Closure is a variable:
  `instantiation_error`
Closure is neither a variable nor a callable term:
  `type_error(callable, Closure)`

#### Examples

Call a goal, constructed by appending additional arguments to a closure, in the context of the object or category containing the call:
  `call(Closure, Arg1, Arg2, ...)`
To send a goal, constructed by appending additional arguments to a closure, as a message to self:
  `call(::Closure, Arg1, Arg2, ...)`
To send a goal, constructed by appending additional arguments to a closure, as a message to an explicit object:
  `call(Object::Closure, Arg1, Arg2, ...)`