directive

# `public/1`

## Description

    public(Name/Arity)
    public((Name/Arity, ...))
    public([Name/Arity, ...])

    public(Name//Arity)
    public((Name//Arity, ...))
    public([Name//Arity, ...])

    public(op(Precedence,Associativity,Operator))
    public((op(Precedence,Associativity,Operator), ...))
    public([op(Precedence,Associativity,Operator), ...])

Declares public predicates, public grammar rule non-terminals, and public operators. A public predicate can be called from any object. A public non-terminal can be used as an argument in phrase/2 and phrase/3 calls from any object.

Note

Declaring a public operator does not make it global when the entity holding the scope directive is compiled and loaded. But declaring public operators provides a reusable specification for using them in the entity clients (e.g., in uses/2 directives).

## Template and modes

    public(+predicate_indicator_term)
    public(+non_terminal_indicator_term)
    public(+operator_declaration)

## Examples

    :- public(ancestor/1).

    :- public((instance/1, instances/1)).

    :- public([leaf/1, leaves/1]).

See also

private/1, protected/1, predicate_property/2