implements_protocol/2-3¶
Description¶
implements_protocol(Object, Protocol)
implements_protocol(Category, Protocol)
implements_protocol(Object, Protocol, Scope)
implements_protocol(Category, Protocol, Scope)
Enumerates, by backtracking, all pairs of entities such that an object
or a category implements a protocol. The relation scope is represented
by the atoms public, protected, and private. This predicate
only returns direct implementation relations; it does not implement a
transitive closure.
Modes and number of proofs¶
implements_protocol(?object_identifier, ?protocol_identifier) - zero_or_more
implements_protocol(?category_identifier, ?protocol_identifier) - zero_or_more
implements_protocol(?object_identifier, ?protocol_identifier, ?scope) - zero_or_more
implements_protocol(?category_identifier, ?protocol_identifier, ?scope) - zero_or_more
Errors¶
Object is neither a variable nor a valid object identifier:
type_error(object_identifier, Object)Category is neither a variable nor a valid category identifier:
type_error(category_identifier, Category)Protocol is neither a variable nor a valid protocol identifier:
type_error(protocol_identifier, Protocol)Scope is neither a variable nor an atom:
type_error(atom, Scope)Scope is an atom but an invalid entity scope:
domain_error(scope, Scope)Examples¶
% check that the list object implements the listp protocol:
| ?- implements_protocol(list, listp).
% check that the list object publicly implements the listp protocol:
| ?- implements_protocol(list, listp, public).
% enumerate only objects that implement the listp protocol:
| ?- current_object(Object), implements_protocol(Object, listp).
% enumerate only categories that implement the serialization protocol:
| ?- current_category(Category), implements_protocol(Category, serialization).