built-in method
call//1-N
Description
call(Closure)
call(Closure, Arg1, ...)
call(Object::Closure, Arg1, ...)
call(::Closure, Arg1, ...)
call(^^Closure, Arg1, ...)
...
This non-terminal takes a closure and is processed by appending the two implicit grammar rule arguments to the arguments of the closure. This built-in non-terminal is interpreted as a private non-terminal and thus cannot be used as a message to an object.
Using this non-terminal is recommended when calling a predicate whose last two arguments are the two implicit grammar rule arguments to avoid hard-coding assumptions about how grammar rules are compiled into clauses. Note that the compiler ensures zero overhead when using this non-terminal with a bound argument at compile-time. To call a predicate with a different argument order, use a lambda expression or define a predicate alias. For example:
square -->
call([Number, Double]>>(Double is Number*Number)).
When using a backend Prolog compiler supporting a module system,
calls in the format call(Module:Closure)
may also be used.
Meta-non-terminal template
call(0)
call(1, *)
call(2, *, *)
...
Modes and number of proofs
call(+callable) - zero_or_more
call(+callable, ?term) - zero_or_more
call(+callable, ?term, ?term) - zero_or_more
...
Errors
Closure
is a variable:instantiation_error
Closure
is neither a variable nor a callable term:type_error(callable, Closure)
Examples
call(Closure)
call(^^Closure)
call(::Closure)
call(Object::Closure)