^^Predicate
Calls an imported or inherited predicate definition. The call fails if the predicate is declared but there is no imported or inherited predicate definition (as per the closed-world assumption). This control construct may be used within objects or categories in the body of a predicate definition.
The lookups for the predicate declaration and the predicate definition are performed using a depth-first strategy. Depending on the value of the optimize
flag, these lookups are performed at compile time whenever sufficient information is available. When the lookups are performed at runtime, a caching mechanism is used to improve performance in subsequent calls.
When the call is made from within an object, the lookup for the predicate definition starts at the imported categories, if any. If an imported predicate definition is not found, the lookup proceeds to the ancestor objects. Calls from predicates defined in complementing categories lookup inherited definitions as if the calls were made from the complemented object, thus allowing more comprehensive object patching. For other categories, the predicate definition lookup is restricted to the extended categories.
The called predicate should be declared public or protected. It may also be declared private if within the scope of the entity where the method making the call is defined.
This control construct is a generalization of the Smalltalk super keyword to take into account Logtalk support for prototypes and categories besides classes.
^^+callable
instantiation_error
type_error(callable, Predicate)
permission_error(access, private_predicate, Functor/Arity)
existence_error(predicate_declaration, Functor/Arity)
init :- assertz(counter(0)), ^^init.