explicit definition 1 では、他の言語と似た制御構文を使うことができます。
control word
制御構文には、if. のように最後に . がついた単語 (word) を使います。これらの単語を control word と呼びます。control word を用いることができるのは、explicit definition の中だけです。他の場所に書くとエラーになります。
if.
|spelling error
| if.
| ^
したがって、制御構文は explicit definition の外では使えません。
構文
それぞれの制御構文の構造を以下に示します。T や B 等は、ブロック (文の並び) を表しています。ブロックは括弧のような記号ではなく control word で区切られます。
ほとんどが他の言語と似た構造になっているので、さっと目を通すだけでいいです。
if - elseif - else
条件の後には do. を書きます。また、最後は end. で終わります。
if. T do. B end.
if. T do. B else. B1 end.
if. T do. B
elseif. T1 do. B1
elseif. T2 do. B2
else. B3
end.
T の値が 0 のときが false、それ以外は true と見なされます。ただし、値が配列の場合変わった振る舞いをします。
- 空の配列は true
- そうでなければ最初のアトムだけを見る
select - case - fcase
switch ではなく select. です。最初の T の後に do. が無いことに注意してください。
select. T
case. T1 do. B1
fcase. T2 do. B2
case. T3 do. B3
case. do. B4
end.
マッチした case. のブロックを実行した後は残りの case. は読み飛ばされます。次のブロックにフォールスルーさせるためには、fcase. を使います。(上の例では T2 にマッチした場合 B2 と B3 が実行されます。)
case. do. は全てにマッチするので、デフォルトの処理を書くのに使います。
-: に似た方法で比較されるので、配列も普通に使えます。
while / whilst
whilst. は while. と似ていますが、最初の T の評価をスキップします (do-while 相当)。
while. T do. B end.
whilst. T do. B end.
for / for_ijk
for. はリストの各要素について B を実行します (for each 相当)。要素を変数 i で受ける場合は for_i. とします。(このとき一緒に、変数 i_index に要素のインデックスが入ります。) 変数名は何でも構いません。
for. T do. B end.
for_i. T do. B end.
break / continue / return / throw
break.
continue.
return.
throw.
return. の構文は戻り値を伴いません。返される値は最後に実行した文の結果です 2。
throw. は uncaught throw. エラーを発生させます。エラーの種類を指定することはできません。
try - catch - catchd - catcht
try. B
catch. B1
catchd. B2
catcht. B3
end.
catch. と catchd. は、何らかのエラーが発生すると実行されます。catchd. は、デバッグ時には無視されます 3。catcht. は throw. によるエラーの場合のみ実行されます。
throw. 同様にエラーの種類は指定できません。
assert
T が false (0) の場合に assertion failure を発生させます。if. とは異なり、配列は全ての要素がチェックされます。
assert. T
goto_lbl / label_lbl
goto から対応する label にジャンプする機能です。ラベルの名前は for_ と同じように書きますが、変数とラベルは別物なので名前の衝突を気にする必要はありません。
goto_lbl.
label_lbl.
[ 前 : direct definition ] [ 目次 ] [ 次 ]