循环

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区域里有用处(一般在函数定义里)。