循环¶
for
¶
数组的主要用途之一是允许代码通过使用循环得到简化。因此,在结束关于数组的本章前,我们将介绍一些基本的循环结构,以及循环是如何与数组功能相结合的。
一般而言,for
关键字用以表示循环。但for
也可以用在很多不同的情景里。本章中内的数个例子使用了for
来生成方程组。for
用在等式区域内时,每个在for
循环内的方程都会对应每一个循环变量的取值再生成相应的方程。用这种方式,我们可以很容易地生成具有相同总体结构、而仅仅是循环索引变量值不同的一组方程。for
循环在等式区域内的一般语法是:
equation
for i in 1:n loop
// equations
end for;
注意,循环索引变量(如这里的i
)并不需要被声明 。还要注意这些变量仅仅在for
循环的范围内存在(而在循环的前后均不存在)。
for循环当然可以嵌套在自身之中。例如:
equation
for i in 1:n loop
for j in 1:n loop
// equation
end for;
end for;
for循环还可以出现在其它区域里。例如,for循环可以出现在initial equation
区域里,或者algorithm区域。
另一种可以看到for
关键字的情形是在我们关于数组解析的讨论里。在这种情况下,for
结构没有用于生成方程或语句,而是在填充在数组中的各个元素。
while
¶
Modelica语言还有另一种类型的循环,那就是while
循环。while
循环在Modelica里并不常用。其原因在于,不同于通用的语言,Modelica是一种面向等式的语言。此外,Modelica规定了一个模型应该包括相等数量的方程和未知数。这样的模型被认为是“平衡的模型” 。
之所以说while
结构不常用,是因为平衡的模型要求等式数目(对于编译器)是可预测的。因为for
循环有界而且下标变量值的数目总是已知的(因为下标变量总是来自于可能值组成的向量),所以产生方程的数量也总是已知的。对于while
循环就不能下同样的结论了。因此,while
循环仅仅在algorithm区域里有用处(一般在函数定义里)。