反復には、先に判定し、真ならば内部を実行するということを繰り返す前判定反 復と、先に内部を実行し、その後で判定して、真ならばまた繰り返すという後判 定反復の2種類がある。 また、前判定の中には、回数を指定し、その回数だけ反復する、というものもあ る。 PADELでは、前判定反復を表すのに while を、後判定を表 すのに do 〜 while を、そして回数指定の 反復には for を使う。 これらの書式については、次の例を見れば分かるだろう。
do{ input N }while(N < 1) for(i = 1, N){ input A[i] } for(i = 2, N){ j = i while(j >= 2 && A[j-1] > A[j]){ A[j-1] <-> A[j] j = j - 1 } } for(i = 1, N){ print A[i] }
少々長くなってしまったが、これはN個のデータをソートして出力するアルゴ リズムである。
まずデータ数Nを入力する。この時、入力した値が1より小さければ不正なの で、再入力を促す。 このように、まず何かを行ってから判定するのが後判定である。
次に、N個のデータを入力する。 このような、回数指定の反復は、 for を使って書く。 その後で、ソーティングの際に、1つ前の値と大小を比較し、前の値の方が大き ければ交換して、また繰り返す、という操作をしている。 このような場合は前判定なので、 while を使っている。 ところで、 for 文と while 文は共に前判定で、出力されるPAD 図の形が同じであるが、一応回数指定の反復が for、その他の前判定反復 が while、というように使い分けておくことを勧める。
さて、最後にいくつか注意すべき点、というか、可能な書式について述べておこう。
まず、反復部が1命令のみの場合、{ }
で囲む必要はない。
つまり、
for(i = 1, N) input A[i]
といった書き方が可能である。
もちろん { }
で囲んだとしても何も問題はない。
さらに、
for(i = 1, N){ }
のように、反復部がなくても構わない。
但し、その場合は必ず { }
で囲まなければいけない。
ところが、C言語の真似をして、
for(i = 1, N) input A[i]
と書くとエラーになってしまうので注意してほしい。 これは、 for(i = 1, N) という反復命令と、 input A[i] という命令と、2命令を1行に書いたことになり、1行1命令の原則に反して いるのである。 もちろん、
for(i = 1, N){ input A[i] }
と書いても駄目である。
また、{
の前や、 do while文の
}
の後ろに改行コー
ドを入れても構わない。
do { input N } while(N < 1) for(i = 1, N) { input A[i] }
但し、他の箇所では改行はしてはいけない。
また、空白は適当に入れて構わない。
for ( i = 1, N ) { input A[i] }
条件式には、任意の文字列を書くことができる。