In some cases, a function is simply a fixed set of step by step calculations. But in other cases, some kind of looping or iteration is required. In this section, we’ll cover the different control structures that are allowed within a function definition.
We’ve already seen use cases involving if
statements and
expressions. These are, of course, allowed inside functions as well.
In fact, in an equation
section there is a restriction on if
statements that each branch of the if
statement (i.e., under all
conditions) generate the same number of equations. But that
restriction does not apply in an algorithm
section (e.g., in a
function definition).
In an equation
section, looping is (just like with branching)
restricted to ensure that the number of equations generated is the
same regardless of the state of the system. For this reason, the only
looping construct allowed in an equation
section (and, therefore,
the only one we have discussed up until now) is the for
loop.
The syntax of a for
loop is the same in a function as it is in any
other context. It identifies an iteration variable and then assigns
that iteration variable a set of values contained in a vector, e.g.,
algorithm
for i in 1:10 loop
// Statements
end for;
There two main differences between an equation
section and an
algorithm
section is that an algorithm
section uses explicit
assignment statements instead of equations and, since there are no
equations, there are no concerns about generating a specified number
of equations when using if
or for
.
In addition, an algorithm
section allows us the opportunity to be
more flexible by permitting the use of while
loops as well. A
while
loop is not permitted in an equation
section because, by
its very nature, the number of iterations (and, therefore, the number
of equations created in an equation
section) is unpredictable.
But this unpredictability is not an issue in an algorithm
section.
As we already saw in the InterpolateVector
function from our
previous discussion of Interpolation, the syntax for a
while
loop is:
while x>=ybar[i+1,1] loop
i := i + 1;
end while;
The main elements of the while
loop are the condition expression
that determines whether to continue looping and the statements within
the while
loop.
break
and return
¶When iterating, it is sometimes necessary to terminate the
iterations prematurely. For example, in a for
loop, the number of
iterations is normally determined by the vector of values being
iterated over. But there are cases where subsequent iterations are
unnecessary. Similarly, in a while
loop, it may be convenient to
have a check within the while
loop that indicates when to
terminate. In these cases, a break
statement can be used to
terminate the innermost loop.
Another issue of control flow involves when to terminate and exit from
the algorithm
section itself. There are many circumstances in
which all the output
variables have been assigned their final
values. While it is always true that if
and else
statements
can be used to prevent any further calculations and assignments, it is
often more readable to simply indicate clearly that no further
calculations are needed. In such cases, the return
statement can
be used to terminate any further processing within a function’s
algorithm
section. When a return
statement is encountered,
whatever values are currently associated with the output
variables
are the ones that will be returned.