DO

Syntax
do [repetitor] [conditional];
    instructionlist
  end [name];


repetitor の部分は, (↓)のなかのどれかひとつ:
conditional の部分は, (↓)のどちらか:

do は end と対になって使われたりする。 けど, end があればその前の部分に do があるはずかとゆーと, ちょっと違う。 とゆーのも, ほかにこんなのもあったりするから。

do 〜 end の使い方も, 実は二種類ある。 まずは文節(?)をまとめるとゆー使い方。コレは if 文と組み合わせたりするもので, こんな感じのものに相当する。

そしてもう一つの使い方はループ。 ループのときの数え方は言語によって微妙に違っていたりして, 思想の違いっつーかそんなのを感じたりしないでもない。
それは 0から数を数え, 例えば 1メートルおきに杭を立てるとき何本になるか? みたいな数え方と, それから, 単純に 1から数え, 杭と杭との間の空間の数を数えるよーな数え方。 Rexxでは主に 1から数えることが多い。

do i = 1 to score_count
   say i '番目は' score.i
end

でも C言語風に 0から数えるよーな記述もできたりする。

do i = 0 for score_count
   say i '番目は' score.i
end

/* あるいは 「conditional」を指定する場合 */
do i = 0 while i < score_count
   say i '番目は' score.i
end

後者の方が C言語のソレに近いかも。
その(大きな)違いは, ループ中に score_countの値を変更すると, ループの回数も変わるかどーかってとこ。


DROP

Syntax
drop namelist;

namelist は変数名のリスト


EXIT

Syntax
exit [expression];

プログラムを終了する。んで 呼び出し元にもどる訳だけど, 呼び出し元が Rexxプログラムだったりすることもあるかも。
つまりコマンドラインから起動されたら, コマンドプロンプトのとこにもどるんだけど, あるプログラムからサブルーチンのよーに呼び出されたら, (コマンドラインではなく)元のプログラムにもどる。

関数を callする場合 returnで もどる訳だけど, 関数ではない主処理で returnすると, 呼び出し元のプログラムにもどる。てことで, exitとゆーのは, 主処理での returnと同じ。
それから, returnと同じよーに呼び出し側に戻り値を返したりできる。 呼び出し側が Rexxの関数呼び出しならば, 返せる値は文字ストリング, そして, コマンドラインならば, ソレは数値しか返せない。(0〜255だっけ?)


NOP

Syntax
nop;

ダミー。 no operations。then とか else の後ろに置いたりして, 何もしなくてよいことを指定したりする。 何もしなくてよいからって 何も置かなかったら, thenの次の行がその対象になったりするので, 使い道がない訳じゃないのかも。


IF

Syntax
if expression[;] then[;] instruction
  [else[;] instruction]

条件判断するときに使う。条件が真のとき then 以降を実行し, 偽のときは else 以降を実行する。
他の言語では then てゆー単語を記さなくてよいものもあるんだけど, ソレはソレで一長一短ある訳。 てゆーのは, 条件式と, 真のときに実行する命令群, そのふたつの区切りに then がある訳なので, 条件式はかっこで括らなくてよいのだ。

if文には, 暗黙のセミコロンの場所がいくつかあって, このことで, それなりに自由な表現ができたりする。 つまり, then を次の行に置いてもよいし, if文と同じ行でもよい。 でも, else を if文と同じ行にするには ;を指定しなきゃなんない。てゆーのも instruction にソレが必要だから。


ITERATE

Syntax
iterate [name];

他の言語では continueに相当するつったら分かるかも知れない。 ループの中に指定することができ, ループの先頭に戻るってヤツ。 name は, do で使っている名前(カウンター?)で, 多重にループを抜け出すときに指定すると便利かも。