何度も繰り返すことをCatyスクリプトで書いてみる
CatyScriptの基本はともかくパイプライン。CatyScriptの変数は、パイプライン・プログラミングの補助的なツールとなる。
すべてのデータをパイプラインだけで取り扱う場合、後で使う予定のデータを何もしないで単にパイプライン内を引き回すことになり、これは面倒だし可読性もすごく低下する。そこで、律儀にパイプラインを通さないでワープするような、データ時空のワームホールのようなものがあると便利、それが変数。
/test/000.html から /test/999.html にリクエストするコマンドを書いてみる。([追記]gr-eq を gt-eq に変更[/追記])
/** greater-or-equal 述語 */
command gt-eq [number] :: number -> @(True|False) number;/** 入力を1増やす */
command inc :: integer -> integer;/** 文字列の整形 */
command format [string] :: any -> string;
command request-1000 :: void -> void {
0 | // 初期値の投入
begin {
gt-eq 1000 |
when {
True => void, // オシマイ
False => set { pass > count, format "/test/%03d.html" > path};
request %path; // リクエストの実行
%count | inc | repeat // beginの先頭に飛ぶ
}
}
};
この例だとカウンタ変数にあたるデータがパイプラインを流れるが、begin/repeatでぐるぐる回る。パイプラインの一部でループする。それがエルゴット繰り返し=加法的トレース。