構文コマンド¶
if¶
書式¶
$(if 条件文 真の場合の文)
$(if 条件文 真の場合の文 else 偽の場合の文)
$(if 条件文 真の場合の文 else if 条件文2 …)
戻り値¶
真の場合の文、または偽の場合の文の戻り値
解説¶
条件文の真偽に応じ、真の場合の文、または偽の場合の文を実行する。else if節は何段でもつなげる事ができる。
elseなどのコマンドの前後には必ず空白文字・改行文字が必要。
使用例¶
例1
$(if $[ ${mode} == "Y" ] "\h\はい\e" else "\hいいえ\e")
# modeエントリの内容で検索したものが"Y"の場合、「はい」と表示
# それ以外の場合は「いいえ」と表示
例2
$(if "true" $(set a "1" ; set b "2") )
# aエントリの内容は1、bエントリの内容は2になる
# マルチステートメント(複文)を使っている
例3
=dict
a : 1
b : 2
=end
=kis
if $[ ${a} == "1" ] $(
if $[ ${b} == "2"] $(
echo "あたり";
) else $(
echo "はずれ";
);
) else $(
echo "はずれ";
);
=end
# if文の入れ子の例
# 「あたり」と表示される
foreach¶
書式¶
$(foreach エントリ1 エントリ2 文1)
戻り値¶
文1をエントリ2内の全単語について評価した結果
解説¶
エントリ2内の全単語を順にエントリ1にセットし、そのつど文1を評価する。文1に置換ブロックを用いる場合には、$()等で囲む。
使用例¶
$(set N 0 ; foreach i npw $(echo ${i}様、 ; inc N) ; echo 以上${N}名)
# npwエントリ内の人名を全て「様」をつけて呼び、最後に「以上n名」と
# 人数を表示
loop¶
書式¶
$(loop 回数 文1)
戻り値¶
文1の戻り値
解説¶
指定した回数だけ、文1を繰り返し評価する。回数、文1に置換ブロックを用いる場合には、$()等で囲む。
使用例¶
$(loop 10 "tick!")
# 「tick!」と10回表示される
silent¶
書式¶
$(silent)
戻り値¶
なし
解説¶
マルチステートメント中、silentが登場するまでの戻り値を破棄。
使用例¶
$(echo 1 ; echo 2 ; silent ; echo 3)
#「3」がブロックの戻り値になる
参考
$(echo 1 ; echo 2 ; echo 3)
#「123」がブロックの戻り値になる
until¶
書式¶
$(until 条件文 文1)
戻り値¶
文1の戻り値
解説¶
条件文を評価し、結果が偽ならば文1を評価する。この動作を、条件文の評価結果が偽である間、ずっと繰り返す。条件文、文1に置換ブロックを用いる場合には、$()等で囲む。
使用例¶
=kis
setstr A ${npw};
setstr B ${npw};
until $[ ${A} != ${B} ] $(
setstr B ${npw};
);
# AエントリとBエントリが必ず異なるようにする
=end
while¶
書式¶
$(while 条件文 文1)
戻り値¶
文1の戻り値
解説¶
条件文を評価し、結果が真ならば文1を評価する。この動作を、条件文の評価結果が真である間、ずっと繰り返す。条件文、文1に置換ブロックを用いる場合には、$()等で囲む。
使用例¶
=kis
setstr A ${npw};
setstr B ${npw};
while $[ ${A} == ${B} ] $(
setstr B ${npw};
);
# AエントリとBエントリが必ず異なるようにする
=end
break¶
書式¶
$(break)
戻り値¶
なし
解説¶
loop、until、while、foreach等のループ構文から抜け出す。
使用例¶
# dataエントリ内の単語を調べ、「END」だったらループから抜ける
$(
setstr @count 0;
loop $(size data) $(
if $[ $data[${@count}] == "END" ] $(
break;
) else $(
inc @count;
);
);
get data[${@count}];
)
continue¶
書式¶
$(continue)
戻り値¶
なし
解説¶
loop、until、while、foreach等のループ構文中で、現在のループ処理を終了し、次のループ処理に入る
使用例¶
# dataエントリの単語で「ゴースト」を含む単語のみdata2エントリにコピー
$(
loop $(size data) $(
setstr @count ${-1};
echo $data[${@count}];
if $[ $data[${@count} !~ "ゴースト" ] $(
continue;
);
pushstr data2 $data[${@count}];
);
)
NULL¶
書式¶
$(NULL)
戻り値¶
なし(空文字列)
解説¶
空文字列を返す。""と同等。過去互換性とデバッグなどの便宜のために残っている。
使用例¶
=kis
if $[ ${test1} == $(NULL) ] $(
echo "test1はカラ";
);
=end
# test1が空のエントリ、もしくは評価結果が""の場合、
# 「エントリ1はカラ」を返す
?¶
書式¶
$(? 文1 文2 ... 文n)
戻り値¶
文1から文nまでの内どれか一つの戻り値
解説¶
文1~文nから、どれか一つをランダムに選んで評価する。拡張makotoの代用。
使用例¶
$(? "右" "左")"に行く"
# 「右に行く」または「左に行く」が返る
function¶
書式¶
$(function 関数名 関数の定義)
$(function 関数名)
戻り値¶
- 引数が2つの場合なし
- 引数が1つの場合、関数定義内容の文字列表現
解説¶
関数コマンドを定義する。関数定義中、@argエントリが引数として使用できる。$@arg[0]は関数名で、引数は$@arg[1]からとなる。関数定義全体の戻り値が、関数の戻り値となる。
組み込み関数と同じ名前のコマンド(ただし、構文コマンドは不可)も定義可能。同名の組み込みコマンドとユーザ定義コマンドが存在した場合、ユーザ定義コマンドが優先して呼び出される。その場合、先頭に"."を付けて呼び出すことにより、元の組み込みコマンドを強制的に呼び出すことができる。
引数が関数名だけだった場合、関数定義の内容の文字列表現が返る。この戻り値は、関数定義内容をエントリに記述し、getcodeコマンドでエントリを呼び出した場合と等価である。
使用例¶
=kis
# エントリにセットした値を戻り値とする関数を定義する
function tset $(
# 引数が2個でなければ何もしない
if $[ $(size @arg) != 3 ] $(return "");
set $@arg[1] $(getcode @arg[2]);
get @arg[2];
);
# ユーザ定義関数tsetの定義を、funcdefエントリに格納
set funcdef $(function tset);
=end
lambda¶
書式¶
$(lambda 関数の定義)
戻り値¶
定義された関数の名前
解説¶
名前を付けずに関数コマンドを定義し、その名前を返す。名前はSystem.Lambda.nの形で、定義済みの関数と重ならないように自動で付けられる。関数の定義の書き方と引数の渡され方は、functionと同じである。
返された名前をエントリに入れておき、$(${エントリ} 引数)のようにコマンド名として使うと呼び出せる。関数の引数に名前を渡して、呼び出し先で使うこともできる。
定義の中から、lambdaを定義した場所の@で始まるローカルエントリ(外側の関数の@argなど)は参照できない(クロージャではない)。ローカルエントリは、呼び出されたときに作られるものだけが見える。
定義した関数は自動では消えない。不要になったらrmfuncで削除する。
使用例¶
=kis
# 引数を[ ]で囲んで返す無名関数。名前がfエントリに入る
set f $(lambda $(echo [$@arg[1]]));
# 関数に名前を渡して、呼び出し先で使う
function apply $(
echo $($@arg[1] $@arg[2]);
);
=end
$(${f} hi) # 「[hi]」が返る
$(apply ${f} hi) # 「[hi]」が返る
rmfunc¶
書式¶
$(rmfunc ユーザ定義関数名)
戻り値¶
なし
解説¶
ユーザが定義した関数コマンドを削除する。
使用例¶
=kis
# my_findコマンドを削除する
rmfunc my_find;
=end
return¶
書式¶
$(return 戻り値)
戻り値¶
指定した戻り値
解説¶
関数から指定した戻り値で直ちに抜ける。戻り値は省略可能で、省略した場合、それまでの関数の出力が関数の戻り値となる。
使用例¶
=kis
function じゃんけん $(
if $[ $@arg[1] == 1 ] $(
return "ぐー";
) else if $[ $@arg[1] == 2 ] $(
return "ちょき";
) else $(
return "ぱー";
);
);
=end