hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
repeat〜loop構文は定型的に変数を要求する場合が多いので、要求されそうな変数をマクロにしてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | - | - | ! |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| - | | ! |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| - | | ! |
|
repeat p1,p2,p3
p1=1〜(-1) : ループ回数
p2=0〜(0) : システム変数cntのスタート値
p3=(nowcnt) : cntに対応させる変数
repeat命令には新たに第3引数を定義しました。第3引数に当てられた変数は、そのrepeat〜loop構文中のcntと同じ値を返します。
これによって、二重にrepeat命令を使い、各repeat〜loop構文中のcntを参照したい際に、代入用の変数を定義する手間が省けます。
第3引数を省略した場合、nowcntがcntと同じ値を返します。
この第3引数は、あくまでrepeat命令直後のcnt用変数定義を省略する為の物です。厳密にcntと第3引数が同期しているわけではないので、第3引数に値を代入したりすれば、cntと値がずれてしまいます。
break p1
p1=(1) : break時にrefloopに渡す返り値
breakには新規に引数を定義しました。この第1引数に書かれた値を、ループから抜ける際に、新規定義マクロrefloopへと渡します。
break命令で抜ける事無く、規定の回数分の処理を終えてrepeat〜loop構文から抜けた場合、基本的に0が返ります。(loopの第1引数によりますが)ですので、refloopの値によって、break命令を通ったか通っていないかを判別できます。
その他には第1引数にcntを与える事により、抜け出す原因となったcnt値を返す事ができます。これは、配列変数全体からある条件を満たす配列番号を呼び出す際に利用できます。
loop p1
p1=(0) : 普通にループを終えた時にrefloopに渡す返り値
break命令の新規第1引数と同じく、refloopに第1引数を渡します。loop命令では、break命令を使用する事無くループを終了した際にその引数を返します。
デフォルト値は0です。
refloop
break命令やloop命令で返される値の保管先です。
refloopには整数値しか与えられません。また、システム変数に近いマクロなのでbreak命令やloop命令以外で直に値を代入する事はできません。
nowcnt
repeat命令で第3引数を定義しない際に勝手にcntの値のコピー先となる変数です。利用価値はありません。
plurbreak p1,p2
p1=1〜(1) : 抜け出すループネストの数
p2=(1) : plurbreak時にrefloopに渡す返り値
break命令の拡張版です。第1引数の値分ループネストを抜け出します。
第1引数のデフォルト値は1ですので、省略した場合break命令と同じ挙動になります。
第2引数はbreak命令の第1引数と同じくrefloopに渡す値を定義します。
cnt0、cnt1、cnt2、cnt3
cnt0はcntと同値です。
cnt1は現状より1つ浅いループのcnt値を返します。cnt2なら2つ浅いcnt値、cnt3なら3つ浅いcnt値を返します。
このマクロを利用する事で浅いループのcnt値をわざわざ別変数に保管せずとも取得する事ができるようになります。