Grass interpreter for Cyan language
書きかけのまま放置してたCL用GrassリーダーマクロをCyanに移植しました。とりあえず動いたのでリリース。
https://github.com/youz/cyan-scripts/blob/master/grass.cy
=> 本家 Grass the grass-planting programming language
使い方(ソースより)
# Usage: # read grass-code from stdin # $ cyan grass.cy < hello.www # # read grass-code from command line # $ cyan grass.cy -e wWWwwwwWWww # # read input from command line # $ cyan grass.cy -i asdf < echo.www
もしくはテストコードをご覧ください。
$ cyan grass-test.cy w x 16: wwwwwwwwwwwwwwww => ok echo: grass.cy => ok reverse: yc.ssarg => ok ascii: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ => ok id: ^(f){ [1, 2, 3].map(f).(==)([1, 2, 3]) } => ok lambda true: ^(f){ f('a)('b).(==)('a) } => ok lambda false: ^(f){ f('a)('b).(==)('b) } => ok church-num 256: ^(f){ f(^(x){ x.(+)(1) })(0).(==)(256) } => ok y-combinator: ^(y){ y(fact)(10).(==)(3628800) } => ok meadows: wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww^C
現状Cyanでは文字<->文字コード変換ができないので、ASCII印字可能文字+\n, \r, \t以外を入出力関数で使うと
- in -> Null文字(\0)として読む
- out -> "."(ピリオド)を出力
という挙動になります。 (ソースコードには全角のwWvVが使えます。)
その他細かい説明はまた後で