Combinator Logicをコマンドラインから使うためのツール
引数に関数を受け取る関数(コンビネータ)のみで計算をするという考え方をコンビネータ 論理という。 チューリング完全であることが証明されているため、コンピュータで可能な計算は全てコ ンビネータだけで計算が可能である。
以下にコンビネータ論理の主要な関数3つの例を示す。
Sコンビネータは3つのコンビネータを引数に取り、以下のように並び替える。
※xyzはそれぞれ x y zという3つのコンビネータである。
Sxyz -> xz(yz)
以下の図のように、上記コンビネータはそれぞれ4つのコンビネータに分割され、3つの引 数を計算に利用する。
Kコンビネータは2つのコンビネータを引数に取り、1つ目のコンビネータを返す。
Kxy -> x
Iコンビネータは1つのコンビネータを引数に取り、1つ目のコンビネータを返す。
Ix -> x
コンビネータは計算不能になるまで計算結果を次の計算に利用する。 前述のSKIコンビネータによる連続した計算の例を以下に示す。
上記の計算の例では、最終的に x というコンビネータに到達した。 xというコンビネータは存在しないため、計算できずに計算を終了している。 よって、 SKIx というコンビネータの計算結果は x である
colcコマンドは上記のような一連の計算をコマンドライン(以下CLI)上で行えるようにし たものである。
Go言語をインストールし、以下のコマンドを実行する。
go get github.com/jiro4989/colc
または、このGitHubのReleaseページのバイナリをダウンロードする。
colc -h
で確認できる。
Usage:
colc [OPTIONS]
Application Options:
-v, --version バージョン情報
-s, --stepcount= 何ステップまで計算するか (default: -1)
-o, --outfile= 出力ファイルパス
-t, --outfiletype= 出力ファイルの種類(なし|json)
-i, --indent= outfiletypeが有効時に整形して出力する
-c, --combinatorFile= コンビネータ定義ファイルパス
-p, --print 計算過程を出力する
-n, --noprintheader printフラグON時のヘッダ出力を消す
Help Options:
-h, --help Show this help message
echo "Sxyz" | colc
# -> xz(yz)
colc clcode.txt
colc clcode.txt clcode2.txt
# ファイル出力
colc clcode.txt -o out.txt
# コンビネータ定義ファイルを読み込む
colc -c config/combinator.json clcode.txt
- 計算対象のテキストデータは行単位である。
- 引数(処理対象のテキストファイル)が未指定の場合、標準入力待ちとなる。
- 処理対象のテキストファイルは複数受け取れる。
- 最後まで計算させたくない場合は、計算ステップ数を指定して実行できる。
make
make build
make graph