Mode Spec

When introducing a built-in predicate, we shall present its usage with a mode spec, which has the form name(arg, ..., arg), where each arg denotes how that argument should be instantiated in goals, and has one of the following forms:

:ArgName
This argument should be instantiated to a term denoting a goal or a clause or a predicate name, or that otherwise needs special handling of module prefixes. The argument is subject to module name expansion (see Meta Exp).
+ArgName
This argument should be instantiated to a non-variable term.
-ArgName
This argument should be uninstantiated.
?ArgName
This argument may or may not be instantiated.

Mode specs are not only used in the manual, but are part of the syntax of the language as well. When used in the source code, however, the ArgName part must be omitted. That is, arg must be either :, +, -, or ?.