directive
meta_non_terminal/1
Description
meta_non_terminal(Template)
meta_non_terminal((Template, ...))
meta_non_terminal([Template, ...])
meta_non_terminal(Entity::Template)
meta_non_terminal((Entity::Template, ...))
meta_non_terminal([Entity::Template, ...])
meta_non_terminal(Module:Template)
meta_non_terminal((Module:Template, ...))
meta_non_terminal([Module:Template, ...])
Declares meta-non-terminals, i.e., non-terminals that have arguments that will be called as non-terminals (or grammar rule bodies). An argument may also be a closure instead of a goal if the non-terminal uses the call//1-N built-in methods to construct and call the actual non-terminal from the closure and the additional arguments or the phrase//1 built-in method.
Meta-arguments which are non-terminals are represented by the integer
0
. Meta-arguments which are closures are represented by a positive
integer, N
, representing the number of additional arguments that
will be appended to the closure in order to construct the corresponding
meta-call. Normal arguments are represented by the atom *
.
Meta-arguments are always called in the meta-non-terminal calling
context, not in the meta-non-terminal definition context.
Template and modes
meta_non_terminal(+meta_non_terminal_template_term)
meta_non_terminal(+object_identifier::+meta_non_terminal_template_term)
meta_non_terminal(+category_identifier::+meta_non_terminal_template_term)
meta_non_terminal(+module_identifier:+meta_non_terminal_template_term)
Examples
:- meta_non_terminal(phrase(1, *)).
phrase(X, T) --> call(X, T).
See also