for simple-var in list-expr do statements od;
The for
loop executes the statement sequence statements for every
element of the list list-expr.
The statement sequence statements is first executed with simple-var
bound to the first element of the list list, then with simple-var
bound to the second element of list and so on. simple-var must be a
simple variable, it must not be a list element selection
list-var[int-expr]
or a record component selection
record-var.ident
.
The execution of the for
loop is exactly equivalent to the while
loop
loop-list :=
list
;loop-index
:= 1; whileloop-index
<= Length(
loop-list) dovariable
:=
loop-list[
loop-index];statements
loop-index
:=
loop-index+ 1; od;
with the exception that loop-list and loop-index are different
variables for each for
loop that do not interfere with each other.
The list list is very often a range.
for variable in [from..to] do statements od;
corresponds to the more common
for variable from from to to do statements od;
in other programming languages.
gap> s := 0;; gap> for i in [1..100] do > s := s + i; > od; gap> s; 5050
Note in the following example how the modification of the list in the loop body causes the loop body also to be executed for the new values
gap> l := [ 1, 2, 3, 4, 5, 6 ];; gap> for i in l do > Print( i, " " ); > if i mod 2 = 0 then Add( l, 3 * i / 2 ); fi; > od; Print( "\n" ); 1 2 3 4 5 6 3 6 9 9 gap> l; [ 1, 2, 3, 4, 5, 6, 3, 6, 9, 9 ]
Note in the following example that the modification of the variable that holds the list has no influence on the loop
gap> l := [ 1, 2, 3, 4, 5, 6 ];; gap> for i in l do > Print( i, " " ); > l := []; > od; Print( "\n" ); 1 2 3 4 5 6 gap> l; [ ]
GAP 3.4.4