◇ GOTO、CALL のジャンプ先を変数で指定するには
Q:GOTO、CALL のジャンプ先を変数で指定できませんか? たとえば、次のような感じで処理をしたいのですが、エラーになってしまします。
Set %JUMP 0
:LOOP
Inc %JUMP ; %JUMP を1増やす
Call :%JUMP ; 変数 %JUMP の内容のラベルにジャンプ(?)
if (< %0 4) GOTO :LOOP
End
:1
: ; 実行したい処理(1)
Return ; Call された位置に戻る
:2
: ; 実行したい処理(2)
Return
:3
: ; 実行したい処理(3)
Return
A:普通の言語では、そうした処理はできません……が、KMmacro は普通の(ちゃんとした)言語ではないので、実は変数でジャンプ先を指定することができたりします。
ただ、KMmacro は「1文字目が % のものが変数」と認識するので、
Call :%JUMP
では「:%JUMP」を変数と思ってくれません。ですので、たとえば
Call (& ":" %JUMP)
と文字列の連結を使ってラベルの形にするか、あるいはカウンター用の変数を別に用意しておいて、
Inc %0 ; カウンター用変数を1増やす
Set %JUMP (& ":" %0) ; %JUMP の内容をラベルの形に
Call %JUMP
としてください。