## Parallel Iterations¶

The loop construction iterates the triggering of a group (the loop body): one body instance is triggered after the other, with a given interval (the loop period). The action ForAll (for parallel iteration) instantiates a group in parallel for each element in an iteration set. The simplest example is the iteration on the elements of a tab:

          $t := tab [1, 2, 3] forall$x in $t { (3 -$x) print OK $x " at time" (3 -$x) " = (3 - " $x ")" }  will trigger in parallel a group for each element in the tab referred by $t. For each group, the iterator variable $x takes the value of its corresponding element in the tab. It is implicitly a local variable, not visible outside the ForAll body. The result of this example is to print in sequence  OK 3 at time 0 = (3 - 3) OK 2 at time 1 = (3 - 2) OK 1 at time 2 = (3 - 1)  The general form of a parallel iteration is:  forall$var in expression
{
; action sequence
}


where expression evaluates to a int, a tab or a proc:

• If the iteration set $n$ is an int, the values of the iterator are the integers $0, ..., (n-1)\;$ if $n$ is positive, and $(n+1), (n+2), ..., 0\;$ if $n$ is negative.

• If the iteration set is a tab, the values of the iterator are the tab's elements.

• If the iteration set is a proc or an obj, the values of the iterator are the exec that correspond to the proc's or obj's instances.

Parallel iterations also accept a map for the iteration set. In this case, the syntax introduces two variables to refers to the keys and the values in the map:

          $m := map { (1, "one"), (2, "two"), (3, "three") } forall$k, $v in$m
{
print $k " => "$v
}


will print:

      1 => one
2 => two
3 => three


There is also a parralel iteration expression allowed only in the context of a function definition, see the section extended expressions.