Next: mpg-ref-dynamic, Previous: mpg-ref-display, Up: mpg-bpr [Contents][Index]
do/2
(+Iterator do +Body)
iterator, must be nonvar
callable, must be nonvar
This control structure reduces the need to write auxiliary predicates performing simple iterations. It iterates Body until Iterator’s termination condition is true.
A iterator is a term of one of the following forms:
fromto(First,In,Out,Last)
In the first iteration, In=First. In the n:th
iteration, In is the value that Out had at the end of the
(n-1):th iteration. In and Out are local variables in Body.
The termination condition is Out=Last
.
foreach(X,List)
Iterate Body with X ranging over all elements of
List. X is a local variable in Body. Can also be
used for constructing a list. The termination condition is
Tail = []
, where Tail is the suffix of List
that follows the elements that have been iterated over.
foreacharg(X,Struct)
foreacharg(X,Struct,I)
Iterate Body with X ranging over all arguments of Struct and I ranging over the argument number, 1-based. X and I are local variables in Body. Cannot be used for constructing a term. So the termination condition is true iff all arguments have been iterated over.
count(I,MinExpr,Max)
This is normally used for counting the number of iterations. Let
Min take the value integer(MinExpr)
. Iterate
Body with I ranging over integers from Min. I
is a local variable in Body. The termination condition is
I = Max
, i.e. Max can be and typically is a
variable.
for(I,MinExpr,MaxExpr)
This is used when the number of iterations is known.
Let Min take the value integer(MinExpr)
,
let Max take the value integer(MaxExpr)
,
and let Past take the value max(Min,Max+1)
.
Iterate Body with I ranging over integers from Min
to max(Min,Max)
inclusive. I is a local variable in Body.
The termination condition is I = Past
.
param(X)
For declaring variables in Body global, i.e. shared with the context. X can be a single variable, or a list of them. The termination condition is true. Please note: By default, variables in Body have local scope.
iterator,iterator
The iterators are iterated synchronously; that is, they all take their first value for the first execution of Body, their second value for the second execution of Body, etc. The order in which they are written does not matter, and the set of local variables in Body is the union of those of the iterators. The termination condition is the conjunction of those of the iterators.
Call errors (see ref-sem-exc).