built-in method

predicate_property/2

Description

predicate_property(Predicate, Property)

Enumerates, by backtracking, the properties of a visible object predicate. Properties for predicates not declared using a scope directive are not enumerated. The valid predicate properties are listed in the language grammar section on predicate properties and described in the User Manual section on predicate properties.

When Predicate is listed in a uses/2 or use_module/2 directive, properties are enumerated for the referenced object or module predicate.

When Predicate is bound at compile time to a (:)/2 term, this predicate enumerates properties for module predicates (assuming that the backend Prolog compiler supports modules).

Modes and number of proofs

predicate_property(+callable, ?predicate_property) - zero_or_more

Errors

Predicate is a variable:
instantiation_error
Predicate is neither a variable nor a callable term:
type_error(callable, Predicate)
Property is neither a variable nor a valid predicate property:
domain_error(predicate_property, Property)

Examples

To enumerate, by backtracking, the properties of a locally visible user predicate or a user predicate visible in this:
predicate_property(Predicate, Property)
To enumerate, by backtracking, the properties of a public or protected predicate visible in self:
::predicate_property(Predicate, Property)
To enumerate, by backtracking, the properties of a public predicate visible in an explicit object:
Object::predicate_property(Predicate, Property)

An example of enumerating properties for locally visible object predicates. These include predicates listed using uses/2 and use_module/2 directives:

:- object(foo).

    :- uses(bar, [
        baz/1, quux/2
    ]).

    :- public(pred/1).
    pred_prop(Pred, Prop) :-
       predicate_property(Pred, Prop).

:- end_object.
| ?- foo::pred(baz(_), Prop).
Prop = logtalk ;
Prop = scope(public) ;
Prop = public ;
Prop = declared_in(bar) ;
...