For a programming language to be of any use, it must include some ability to loop through a set of statements. Recall that a statement in Darwin is a command or expression followed by a terminating symbol (the semicolon or colon). A command sequence is a sequence of commands separated by terminating symbols. The terminating symbol after the last command in a command sequence is optional. The for command is our first example of iteration in Darwin.
> X:=CreateArray(1..100): > for i from 1 to length(X) do > X[i]:=i: # a command sequence > lprint('The value of X[', i, '] is ', X[i]) # no terminating semicolon > # or colon needed > od: The value of X[ 1 ] is 1 The value of X[ 2 ] is 2 The value of X[ 3 ] is 3 The value of X[ 4 ] is 4 . . .After the for loop terminates, the ith element of X contains the number i. Of course, we could have accomplished the same by writing one hundred different statements of the form X[1]:=1, X[2]:=2,
Now suppose we only want to print those elements of X which are odd and divisible by both 3 and 5. Since all elements of X which have an even index are assigned an even integer, we need only check the odd elements of X to see if they are divisible by these numbers.
> for i from 1 to length(X) by 2 do > if ((mod(X[i], 3)=0) and (mod(X[i], 5)=0)) then > lprint('X[',i,']=',X[i],' is divisible by both 3 and 5'); > fi; > od; X[ 15 ]= 15 is divisible by both 3 and 5 X[ 45 ]= 45 is divisible by both 3 and 5 X[ 75 ]= 75 is divisible by both 3 and 5Here mod(x,y) denotes the modulus function; this returns the integer remainder after dividing y into x. Note the use of the by 2 clause in the for command. In general, you may count in steps by any value you would like. We may also specify a negative increment to count backwards. If we change the first line of the about for loop to
> for i from length(X)-1 to 1 by -2 dothen the exact same is accomplished but in the reverse order.
X[ 75 ]= 75 is divisible by both 3 and 5 X[ 45 ]= 45 is divisible by both 3 and 5 X[ 15 ]= 15 is divisible by both 3 and 5
Chapter describes several other means of
looping in Darwin.