4.1 Notation of Predicate Descriptions

We have tried to keep the predicate descriptions clear and concise. First the predicate name is printed in bold face, followed by the arguments in italics. Arguments are preceded by a mode indicator There is no complete agreement on mode indicators in the Prolog community. We use the following definitions:21These definitions are taken from PlDoc. The current manual has only one mode declaration per predicate and therefore predicates with mode (+,-) and (-,+) are described as (?,?). The @-mode is often replaced by +.

+Argument must be fully instantiated to a term that satisfies the required argument type. Think of the argument as input.
-Argument must be unbound. Think of the argument as output.
?Argument must be bound to a partial term of the indicated type. Note that a variable is a partial term for any type. Think of the argument as either input or output or both input and output. E.g. In stream_property(S, reposition(Bool)), the reposition part of the term is input and the uninstantiated Bool is output.
:Argument is a meta-argument. Implies +. See section 5 for more information on module-handing.
@Argument is not further instantiated. Typically used for type-tests.
!Argument contains a mutable structure that may be modified using setarg/3 or nb_setarg/3.