繰り返しステートメント (for...while...do)
|
使い方
|
|
| for <name> | | from <expr> | | by <expr> | | to <expr> | | while <expr> |
do <statement sequence> end do;
または次のように使います。
| for <name> | | in <expr> | | while <expr> |
do <statement sequence> end do;
(注意: 上記 | | 間の節はオプションで使用する順序は自由ですが、使用する場合は、先頭にする必要があります)。
|
|
説明
|
|
•
|
繰り返しステートメントは、statement sequence (ステートメント列) を繰り返し実行できる機能があります。指定した回数だけ繰り返したり (for...to 節を使用) または一定の条件が満たされるまで繰り返したりできます(while 節を使用)。また、この 2 種類の形式の節を同時に使用することもできます。
|
•
|
オプションの for name 節はループの制御変数を指定します。name には type(expr, name) が true (真) であればどのような式でも使用できます。
|
|
for 節を省略した場合、ループには暗黙的な制御変数があります。ループは制御変数を指定した場合と同様に動作しますが、変数の値にはアクセスしません。
|
•
|
from 節または by 節を省略すると、デフォルト値の from 1 または by 1 がそれぞれ使用されます。
|
•
|
while 節の expr はブール式で、これは true、false、または FAIL に評価しなければなりません。そうでないとエラーが発生します。false または FAIL のどちらでも繰り返しステートメントを終了できます。
|
•
|
to expr および while expr はそれぞれの反復の最初にテストされます。注意: to expr の場合 はループの最初に一度だけ評価され、この値は終了テストとして使用されます。while expr では はループのすべての反復の前に評価されます。
|
|
from expr および to expr のいずれも単一文字の 文字列 にすることができ、その場合は基本の文字表示で定義された範囲に指定した文字が出現する限り、ループが繰り返されます。制御変数で適用される値の列は、この基本の文字セットによって異なります。
|
|
for...to 節または while 節を含むループでは、条件 が最初にテストされます。この条件が満たされない場合、ループは条件 while expr をテストせずに終了します。
|
•
|
to expr または while expr の節がない場合、ループは無限になります。このようなループから抜けるには、break ステートメント、プロシージャでの return、または quit ステートメントのいずれかを実行します。
|
•
|
in expr 節を使用すると、インデックス変数は連続するオペランドを値としてとるか、あるいは指定された式 expr のエントリが op コマンドによって決定されます。例外は expr が rtable、表、または 式列 の場合です。
|
|
式列の場合は、インデックス変数は で決定されたオペランドを値としてとります。
|
|
表の場合は、インデックス変数は で決定されたオペランドを値としてとります。
|
|
rtable の場合は、インデックス変数はインデックス順序でオペランドをとらない可能性があります。
|
|
注意: in expr ループでは、 はループの最初に一度だけ評価されます。
|
|
printlevel 節を設定すると、printlevel で指定されたレベルまで実行されたすべてのステートメントの結果が表示されます。デフォルトでは、printlevel は最初に に設定されます。したがって、ネストされたループを使用する場合、そのループにあるすべてのステートメントの結果を確認するには、printlevel により高位の値を設定しなければならない可能性があります。
|
|
end do をセミコロンの代わりにコロンで終了すると、printlevel の設定にかかわらず、ループ内のすべての結果が表示されません。(明示的な出力を除く)。
|
•
|
スパースな 行列、ベクトル または rtable で in expr 節を使用すると、ゼロ以外のエントリのみスキャンされます。それ以外の場合、関数のインデックス や ストレージ にかかわらずオブジェクトのインデックス空間全体がスキャンされます。これらのオブジェクトではエントリの順序は指定されません。
|
|
ループ内でネストされているステートメントの結果を表示するその他の方法としては、ステートメントで print コマンドを使用する方法があります。
|
|
|
例
|
|
1) から までの偶数を出力します。
>
|
|
2) 11 から 99 までのすべての 2 桁の奇数の合計を求めます。
>
|
|
>
|
|
| (3.1) |
3) リストの内容を合計します。
>
|
|
>
|
|
| (3.2) |
4) 式列のエントリを乗算します。
>
|
|
>
|
|
| (3.3) |
5) 指定された文字範囲で反復し、文字列にない最初の文字を検索します。
>
|
|
>
|
|
| (3.4) |
|
|
|
|
•
|
上記の各例では、それぞれに演算の最善策を提示しているわけではありませんが、seq、map、add、または mul などの関数は非常に効率的です。
|
|
|
参照
|
|
add, boolean, break, map, mul, next, op, print, printlevel, quit, return, seq, statement
|
|
Download Help Document
Was this information helpful?