built-in predicate
conforms_to_protocol/2-3
Description
conforms_to_protocol(Object, Protocol)
conforms_to_protocol(Category, Protocol)
conforms_to_protocol(Object, Protocol, Scope)
conforms_to_protocol(Category, Protocol, Scope)
Enumerates, by backtracking, all pairs of entities such that an object
or a category conforms to a protocol. The relation scope is represented
by the atoms public
, protected
, and private
. This predicate
implements a transitive closure for the protocol implementation
relation.
Modes and number of proofs
conforms_to_protocol(?object_identifier, ?protocol_identifier) - zero_or_more
conforms_to_protocol(?category_identifier, ?protocol_identifier) - zero_or_more
conforms_to_protocol(?object_identifier, ?protocol_identifier, ?scope) - zero_or_more
conforms_to_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
% enumerate objects and categories that conform to the listp protocol:
| ?- conforms_to_protocol(Object, listp).
% enumerate objects and categories that privately conform to the listp protocol:
| ?- conforms_to_protocol(Object, listp, private).
% enumerate only objects that conform to the listp protocol:
| ?- current_object(Object), conforms_to_protocol(Object, listp).
% enumerate only categories that conform to the serialization protocol:
| ?- current_category(Category), conforms_to_protocol(Category, serialization).