このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

何度も繰り返すことを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でぐるぐる回る。パイプラインの一部でループする。それがエルゴット繰り返し=加法的トレース。