https://github.com/jiro4989/colc
CombinatorLogic文字列を計算するツール
https://github.com/jiro4989/colc
cli combinator golang
Last synced: 10 months ago
JSON representation
CombinatorLogic文字列を計算するツール
- Host: GitHub
- URL: https://github.com/jiro4989/colc
- Owner: jiro4989
- License: mit
- Created: 2018-10-27T15:13:03.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-03-06T03:15:15.000Z (almost 7 years ago)
- Last Synced: 2024-06-20T15:46:00.168Z (over 1 year ago)
- Topics: cli, combinator, golang
- Language: Go
- Size: 561 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# colc (COmbinator Logic Calculator)
[](https://travis-ci.org/jiro4989/colc)
Combinator Logicをコマンドラインから使うためのツール
## コンビネータ論理(Combinator Logic)とは
引数に関数を受け取る関数(コンビネータ)のみで計算をするという考え方をコンビネータ
論理という。
チューリング完全であることが証明されているため、コンピュータで可能な計算は全てコ
ンビネータだけで計算が可能である。
以下にコンビネータ論理の主要な関数3つの例を示す。
### Sコンビネータ
Sコンビネータは3つのコンビネータを引数に取り、以下のように並び替える。
※xyzはそれぞれ x y zという3つのコンビネータである。
```
Sxyz -> xz(yz)
```
以下の図のように、上記コンビネータはそれぞれ4つのコンビネータに分割され、3つの引
数を計算に利用する。

### Kコンビネータ
Kコンビネータは2つのコンビネータを引数に取り、1つ目のコンビネータを返す。
```
Kxy -> x
```
### Iコンビネータ
Iコンビネータは1つのコンビネータを引数に取り、1つ目のコンビネータを返す。
```
Ix -> x
```
### コンビネータの処理の流れ
コンビネータは計算不能になるまで計算結果を次の計算に利用する。
前述のSKIコンビネータによる連続した計算の例を以下に示す。

上記の計算の例では、最終的に x というコンビネータに到達した。
xというコンビネータは存在しないため、計算できずに計算を終了している。
よって、 SKIx というコンビネータの計算結果は x である
## colcコマンド
colcコマンドは上記のような一連の計算をコマンドライン(以下CLI)上で行えるようにし
たものである。
### インストール方法
[Go言語](https://golang.org/doc/install)をインストールし、以下のコマンドを実行する。
```bash
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
### 使い方
```bash
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
```
### 仕様
1. 計算対象のテキストデータは行単位である。
1. 引数(処理対象のテキストファイル)が未指定の場合、標準入力待ちとなる。
1. 処理対象のテキストファイルは複数受け取れる。
1. 最後まで計算させたくない場合は、計算ステップ数を指定して実行できる。
## 開発
### ヘルプ
```bash
make
```
### バイナリの生成
```bash
make build
```
### グラフ画像の生成
```bash
make graph
```