Basic Flow Control¶
This Lesson is estimated to be completed in 20 minutes.
You should have first completed the Lessons:
Description¶
Flow control is an essential aspect of most programming languages.
Here we cover in M the familar FOR loop.
The FOR Loop¶
The for loop in M can take multiple forms.
Simplest Form¶
It simplest form has the familiar structure of
variable = initial value : increment : final value
here we count from 0 to 12 in increments of 3
for i=0:3:12 do
. write i,!
Here we have a more general example
for i=a:b:c do
. set sum=sum+i
. set sqr=sqr+(i*i)
This indicates that the variable i:
- Will start at the value a
- Will increment at values b
- Until it is larger than the value c.
For each iteration, this example above will:
- Accumulate in the variable sum the values of i.
- Accumulate in the variable sqr the values of i square.
Notice the use of parenthesis to ensure the operator precedence of multiplication of i before addition to the variable sqr.
The body of the for-loop starts with the do statement. The lines of code in the body are indicated by the ”.” symbol and the indentation to the right.
The following for loop will print the even numbers from zero to 10. Including zero and 10.
for i=0:2:10 do
. write i,!
Exercise¶
Write this code into a file called triangle.m
start ; compute the triangle of the number 10
set number=10
set triangle=0
for i=1:1:number do
. set triangle=triangle+i
write "Triangle of ",number," is ",triangle,!
quit
Then from the command line compile and execute the program
mumps triangle.m
mumps -r start^triangle
and should get the output 55.
Logical Form¶
The for-loop in M can also be driven by a logical condition instead of the numerical limits of the control variable. This is done by combining the quit command with postconditionals.
Exercise¶
For example, to print again the even numbers up to 10
for i=0:2 do quit:(i=10)
. write i,!
Note that there are two spaces between the do command and the quit command. The expression
quit:(i=10)
is an example of a postconditional.
It can be read as
execute quit if (i=10)
This expression is tested after every cycle of the execution of the body. Therefore in this case, the value of (i=10) has already been processed by the time that the logical postconditional becomes true.
Variations¶
The elements of the for-loop are options and therefore the following variations are easy to compose.
Example¶
Here we compute the powers of two by using a structure similar to a while loop
set s=0
set i=1
for do quit:(i>100)
. write s,!
. s=s+i
. i=s
Notice that here we are skipping the assignment and increment in the FOR Command, and therefore there must be two spaces between the for and do. The loop is terminated when the i variable is larger than 100.
Walking a List¶
The for-loop can also walk a list of items.
For example
for x="John","Paul","Ringo","George" do
. write x,!
will print
John
Paul
Ringo
George
Next Lesson: Basic Conditionals