Logtalk reference manual
Control construct: ::/2

::/2

Description

Object::Predicate
{Proxy}::Predicate

Sends a message to an object. The message argument must match a public predicate of the receiver object. When the message corresponds to a protected or private predicate, the call is only valid if the sender matches the predicate scope container.

The {Proxy}::Predicate syntax construct allows simplified access to parametric object proxies. Its operational semantics is equivalent to the goal conjunction ({Proxy}, Proxy::Predicate). I.e. Proxy is proved as a plain Prolog goal and, if successful, the goal term is used as a parametric object identifier. Exceptions thrown when proving Proxy are handled by the ::/2 control construct. This syntax construct supports backtracking over the {Proxy} goal.

Template and modes

+object_identifier::+callable
{+object_identifier}::+callable

Errors

Either Object or Predicate is a variable:
instantiation_error
Object is not a valid object identifier:
type_error(object_identifier, Object)
Predicate is neither a variable nor a callable term:
type_error(callable, Predicate)
Predicate is declared private:
permission_error(access, private_predicate, Predicate)
Predicate is declared protected:
permission_error(access, protected_predicate, Predicate)
Predicate is not declared:
existence_error(predicate_declaration, Predicate)
Object does not exist:
existence_error(object, Object)
Proxy is a variable:
instantiation_error
Proxy is not a valid object identifier:
type_error(object_identifier, Proxy)
The predicate Proxy does not exist in the user pseudo-object:
existence_error(procedure, ProxyFunctor/ProxyArity)

Examples

| ?- list::member(X, [1, 2, 3]).

X = 1 ;
X = 2 ;
X = 3
yes