built-in method

current_predicate/1

Description

current_predicate(Predicate)

Enumerates, by backtracking, visible, user-defined, object predicates. Built-in predicates and predicates not declared using a scope directive are not enumerated.

This predicate also succeeds for any predicates listed in uses/2 and use_module/2 directives.

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

Modes and number of proofs

current_predicate(?predicate_indicator) - zero_or_more

Errors

Predicate is neither a variable nor a valid predicate indicator:
type_error(predicate_indicator, Predicate)
Predicate is a Name/Arity term but Functor is neither a variable nor an atom:
type_error(atom, Name)
Predicate is a Name/Arity term but Arity is neither a variable nor an integer:
type_error(integer, Arity)
Predicate is a Name/Arity term but Arity is a negative integer:
domain_error(not_less_than_zero, Arity)

Examples

To enumerate, by backtracking, the locally visible user predicates or the user predicates visible in this:
current_predicate(Predicate)
To enumerate, by backtracking, the public and protected user predicates visible in self:
::current_predicate(Predicate)
To enumerate, by backtracking, the public user predicates visible for an explicit object:
Object::current_predicate(Predicate)

An example of enumerating 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(X) :-
       current_predicate(X).

:- end_object.
| ?- foo::pred(X).
X = pred/1 ;
X = baz/1 ;
X = quux/2 ;
no