コンテンツにスキップ

構文コマンド

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