When dealing with two-, and higher-dimensional multiples, it is often necessary to run a subsidiary loop. For example, suppose we wanted to print the square of each element in the multiple declared as
[,]INT primes = (( 2, 3, 5, 7), (11,13,17,19), (23,29,31,37), (41,43,47,53))
with each row on one line. Here is a piece of program which will do it:
FOR i FROM 1 LWB primes TO 1 UPB primes DO []INT pri=primes[i,]; FOR j FROM LWB pri TO UPB pri DO INT prij = pri[j]; print(prij * prij) OD; print(newline) OD
Notice the optimisations. The first defines the ith "row", and the second defines the jth element in that "row". The point is that any piece of program can appear inside the loop clause. Loop clauses can be nested to any depth. Because the loop clause is an enclosed clause, it must contain at least one phrase, and the last phrase must be a unit (see chapter 10 for a thorough discussion of units).
Sian Mountbatten 2012-01-19