Grass on Grass
みどりの日なのでGrass書きました。今回はGrass言語インタプリタ上で動くGrass言語インタプリタ。
https://github.com/youz/Grass_on_Grass
この8kbとちょっとの草原を手で植えるのはさすがに厳しいので Grasspiler を使用して生成しています。
GrasspilerはSML風の文法で書いたラムダ式をGrassのコードにコンパイルしてくれる超便利ツール。 元コードはこんな感じ
https://github.com/youz/Grass_on_Grass/blob/master/grass.ml
実装方針
データ構造が実質Consセル、つまりLispでGrassを書くみたいなもんですね。loopもcallccもありませんがまあそこは気合と根性とCPS変換と末尾再帰でなんとか。いやしかしパーサもうちょっとなんとかならんかな…
Grass on Grassを動かすGrass実装
ベースの処理系はスクリプト言語での実装とかでもHello world動かすくらいなら大丈夫そうですが、最終的にこの2kbほどあるQuineのコードをgrass.grass上で動かしたかったので、ある程度高速な実装を2つ用意しました。
C言語実装
https://github.com/youz/grasses/tree/master/C
要libgc。mingw64とdebianで動作確認してます。なおパーサが手抜きのため全角のwWv
を読めません。
F#実装
https://github.com/youz/grasses/tree/master/FSharp
こちらは全角ソース(UTF-8)も対応。処理速度はC実装よりほんのちょっと遅いくらいです。
(追記) Linux/WSL/MacOS環境ではmlgrass (OCaml実装) の ちょっと修正した奴をocamloptでコンパイルして使うと良いでしょう。 私のC実装の2~3倍速いです。
動かしてみる
$ time grass grass.grass < examples/hello.grass Hello, world! real 0m0.060s user 0m0.047s sys 0m0.031s
Hello worldは難無く実行できますね。
$ time grass grass.grass < examples/quine.grass wWwWwWwwWwwWwWwwWwWwWwWwWwWwWwWwwWwWwWwWwwWwWwWwWwwwWwWwWwwWwwWwWwwWwwWwwWwWwwwWwWwwWwwWwWwWwwWwWwWwWwwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwwWwwWwWwwwWwWwwWwwWwwWwwWwWwwWwwWwwWwwWwWwWwWwWwwWwWwwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwWwwWwWwWwwwWwWwwwWwwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwWwwWwwWwWwwwWwWwWwwWwwWwWwwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwWwwwWwwWwwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwWwWwwWwwWwWwwWwwWwwWwWwwwWwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwwWwWwWwwWwWwWwWwWwWwwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwwWwWwwWwWwWwWwWwwWwWwWwWwWwwwWwWwWwwwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwWwWwWwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwwWwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwWwWwWwWwWwWwwwWwWwWwWwwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwwWwWwwwWwWwWwWwwWwwWwWwwWwwWwWwWwWwWwwwWwWwWwwwWwWwWwWwwWwWwWwWwWwwWwWwwWwwWwwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwwWwWwWwWwwWwwWwwWwWwWwWwwWwwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwWwWwwWwwWwwWwWwWwWwwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwWwwWwWwwWwwWwwWwwWwwWwwWwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwvwwWWwWwwwwwwwWwwwWwwwvwwWWwWWWwvwWWwwWwwwWwwwwwwwwWwwwwWWwvwWWWWwWWWWwwwwWwWwwwWwwwwwwwwwwwwvWwwvwvWwwwwwwwwwWWWWwWWwvwwWWwWwwwwWWWWWWWwwwWWWWWwWwwwwwwwwwwwWwwwwwwwwwWWWWWwvWWWWWwwwwwwwwwwwwvwWWwWWWwvwWWWwwwwwwwwwWwwWwwwwwWwwwwwWWWWWWWwwwwwwwwwWwwwwwwWwWwwwwWwwwwvwwvwWWWWWWWWWWWWWWWWwWwwwWWWWwWwwwwwwwwWwwwwwwwwwwwWwWWWWWwWwwwwwwwwwwWWWWWwwwwwwwwwwwwwwwwWWWwwwwwwvwwwWwwwWWWWWWWWWWWWWwwwWWwvwwwWWwWWwwwwvwwvwwwWwwwwWwWWWwWWWWWWWWWWWWWWWwwwWwwwwwwWWWWWWWWWWwWwwwwWWWWWWWWWWWWWwWwwwwwwwwWWWWWWWWWWWWwvwwwWWWwwwWWwwwwwwWwwwwwwwWWWWWWWwwwWwwWWWwwwWwWwwwwwwwwwwwwWwwwwWwwwWwwwwwwwwwwwwvWwWWWWWWwwwwWwwwwwwwwwwwwwwWWWwWWWWWWWWWWw real 0m1.475s user 0m1.766s sys 0m0.328s
Quineも無事ちゃんと動きました。
ちょっと困ったのが標準入力を扱うプログラムを動かしたい場合。 grassには文字列リテラルやファイル入出力機能が存在しないため、grass製インタプリタに与えるプログラムソースは標準入力から読ませるしかありません。 なのでこのGrass on Grassでは言語仕様を以下のようにちょっと変えています。
- 標準入力からの入力は、大文字のVまたはEOFまでをgrassプログラムソースとする
- Vを見つけてソースの読み込みを終えた場合、残りの入力をgrass.grassインタプリタ上で実行するプログラムへの入力とする
この仕様を利用したechoプログラムを実行してみます。
$ cat examples/echo.grass wwwvwwWWwwWWWWWWWWwwwwWwWwwwwwwwWwwwWwwwwWWWWwwwwwwWwwWwwwvwWWwwWwVasdfqwer $ grass grass.grass < examples/echo.grass asdfqwer
上手く動いてますね。なお本家仕様通りのgrassインタプリタではV以降も普通にソースコードとして読み込みますので、Vの後ろにwWvがある場合動作が変わってしまうのでご注意。
さて、この入力の仕様を利用してこんな事が出来ちゃいます。
$ cat examples/grass2w.grass wvWWWWwwwwvwWwwvwwvwWwwvwwwWwwwWwwwvWWWWWWWWwwwwwwwwwvwWWWWWWwWwwwwwwwwwwwwvwwWWWWWwwwwwwwwwwwwwWWWWWWwwwWwwwWWWwvwWWWWWWwWWWWWWWWWwvwWWWWWWWwWWWWWWWWwvwwwWWWwwWwwWWWWwvwWWWWWWWWWwWWWWWWWWWWWWwvwWWWWWWWWWWwWWWWWWWWWWWwvwwWWWWwwWWWWWWwWWWWWWWWWWWWWwwwWWWWWWwwwwwWWwWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwwWwwwWWWwvWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWwvwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWwwvwWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWwWWWWwvwWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWwWWWWWwvwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwWWWWWWWwwWWwWwwwwwvwWWWWWWWWWWWWWWWWWWwwwwwwwwWwwvwWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwwwwwwwWWWWwwwwwwwWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWWWWWwWWWWWWWwvwwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWwwwWwwwWWWwvwWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWwvwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWwvwwWWwvwwWWwWWWwvwwvWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwwwWWWwvwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWwwwwwwwwwwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwWwwWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWwwwWwwvWwwvwWWWWWWWWWWWWWWWWWWWWWWWwWwwWWWWWWWWWWWWWWWwWwwwwwwwwwwwvWwwwwvwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwWwwwwwwwwWwwwwwwwvwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwwvwwwWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwWWWwWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwwWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWwwwwwwwwwwWwwwwwwWWWwWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwwwwwwWWwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwWWwWWWWWWwWwwwwwwwwwwwvwwWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWwwwwwWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWwwwwwwwwwwwwWWWwvwwvwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwWWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWwwWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwWwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWwWWWWWWWWWWWwvwwWWwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwWWwWWWwvwwWWWwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWWWWWWwwwwWwwWWwWwwwwwwwwvwvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWwwwwwwWWwwwwwwWWWWWWwWwwwwwwwwwWwvwwvwwWWwwwwWwwvwWwwwwwwwwwwWWWwWWWwwwwwwwwwWWWWWwWWWWWwwwwwwwwwwwwWWwWWWWWwvwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwWWWWWWwvwwwwwWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWwWWWWWWWWWwwwwwwwWwwwwwwwWwwwwwwwWWWWwWWWWWWWWWWWwwwwwwWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWwWwwwwwwwwwwwwwWWWWWwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwWWWWwWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwWWWWWWwwwwwwWwwwwwwwwwwwwwwwwWwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwWwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwvwWwwWwwwwwwwwwwwvwwWWwwWWWWwwWwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwWWwWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWwvWwvwvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWwwwWWwWwwwwwwwwwwwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwWWwvwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwWWWWwvwwwwwWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWWwWwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWwwWwwwwWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwvwWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWwWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwvwwwwWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwWWWWwwwwwwwwwwwwwwwwwwwwWwwwwwwwWWWwWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWwWWWwwwWwwWwwwwwwwwwwwWwvwWWWWWWWWWWWWWWWwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw VwWWwwww $ time grass grass.grass < examples/grass2w.grass w real 0m0.387s user 0m0.328s sys 0m0.016s
grass2w.grassの1行目はgrassインタプリタで、V以降はwを1個出力するプログラム。 つまりC製grassインタプリタの上でgrass製grassインタプリタを動作させ、そこにまたgrass製grassインタプリタを読み込ませて動かした上でwを1文字表示するプログラムを実行しています。
もうちょっと重いやつを
$ time grass grass.grass < examples/grass2hello.grass Hello, world! real 0m2.491s user 0m2.859s sys 0m0.188s
Hello world on grass.grass on grass.grass on grass.c。まだ余裕ありそうですね。
$ time grass grass.grass < examples/grass2quine.grass wWwWwWwwWwwWwWwwWwWwWwWwWwWwWwWwwWwWwWwWwwWwWwWwWwwwWwWwWwwWwwWwWwwWwwWwwWwWwwwWwWwwWwwWwWwWwwWwWwWwWwwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwwWwwWwWwwwWwWwwWwwWwwWwwWwWwwWwwWwwWwwWwWwWwWwWwwWwWwwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwWwwWwWwWwwwWwWwwwWwwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwWwwWwwWwWwwwWwWwWwwWwwWwWwwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwWwwwWwwWwwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwWwWwwWwwWwWwwWwwWwwWwWwwwWwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwwWwWwWwwWwWwWwWwWwWwwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwwWwWwwWwWwWwWwWwwWwWwWwWwWwwwWwWwWwwwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwWwWwWwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwwWwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwWwWwWwWwWwWwwwWwWwWwWwwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwwWwWwwwWwWwWwWwwWwwWwWwwWwwWwWwWwWwWwwwWwWwWwwwWwWwWwWwwWwWwWwWwWwwWwWwwWwwWwwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwWwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwWwwwWwWwWwWwwWwwWwwWwWwWwWwwWwwWwWwWwWwWwWwWwwWwWwWwWwWwWwWwWwwWwwWwwWwwWwwWwwWwwWwWwWwWwwWwWwWwwWwwWwwWwWwWwWwwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwWwWwWwWwWwwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwWwwWwWwwWwwWwwWwwWwwWwwWwWwWwWwWwwWwWwWwWwWwWwWwWwWwWwWwWwWwWwWwwWwwWwwWwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwwWwvwwWWwWwwwwwwwWwwwWwwwvwwWWwWWWwvwWWwwWwwwWwwwwwwwwWwwwwWWwvwWWWWwWWWWwwwwWwWwwwWwwwwwwwwwwwwvWwwvwvWwwwwwwwwwWWWWwWWwvwwWWwWwwwwWWWWWWWwwwWWWWWwWwwwwwwwwwwwWwwwwwwwwwWWWWWwvWWWWWwwwwwwwwwwwwvwWWwWWWwvwWWWwwwwwwwwwWwwWwwwwwWwwwwwWWWWWWWwwwwwwwwwWwwwwwwWwWwwwwWwwwwvwwvwWWWWWWWWWWWWWWWWwWwwwWWWWwWwwwwwwwwWwwwwwwwwwwwWwWWWWWwWwwwwwwwwwwWWWWWwwwwwwwwwwwwwwwwWWWwwwwwwvwwwWwwwWWWWWWWWWWWWWwwwWWwvwwwWWwWWwwwwvwwvwwwWwwwwWwWWWwWWWWWWWWWWWWWWWwwwWwwwwwwWWWWWWWWWWwWwwwwWWWWWWWWWWWWWwWwwwwwwwwWWWWWWWWWWWWwvwwwWWWwwwWWwwwwwwWwwwwwwwWWWWWWWwwwWwwWWWwwwWwWwwwwwwwwwwwwWwwwwWwwwWwwwwwwwwwwwwvWwWWWWWWwwwwWwwwwwwwwwwwwwwWWWwWWWWWWWWWWw real 3m5.496s user 3m47.625s sys 0m1.422s
Quine on grass.grass on grass.grass on grass.c。3分かかりましたが完遂しました。
ではもう一段
$ cat examples/grass3w.grass wvWWWWwwwwvwWwwvwwvwWwwvwwwWwwwWwwwvWWWWWWWWwwwwwwwwwvwWWWWWWwWwwwwwwwwwwwwvwwWWWWWwwwwwwwwwwwwwWWWWWWwwwWwwwWWWwvwWWWWWWwWWWWWWWWWwvwWWWWWWWwWWWWWWWWwvwwwWWWwwWwwWWWWwvwWWWWWWWWWwWWWWWWWWWWWWwvwWWWWWWWWWWwWWWWWWWWWWWwvwwWWWWwwWWWWWWwWWWWWWWWWWWWWwwwWWWWWWwwwwwWWwWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwwWwwwWWWwvWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWwvwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWwwvwWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWwWWWWwvwWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWwWWWWWwvwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwWWWWWWWwwWWwWwwwwwvwWWWWWWWWWWWWWWWWWWwwwwwwwwWwwvwWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwwwwwwwWWWWwwwwwwwWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWWWWWwWWWWWWWwvwwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWwwwWwwwWWWwvwWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWwvwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWwvwwWWwvwwWWwWWWwvwwvWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwwwWWWwvwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWwwwwwwwwwwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwWwwWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWwwwWwwvWwwvwWWWWWWWWWWWWWWWWWWWWWWWwWwwWWWWWWWWWWWWWWWwWwwwwwwwwwwwvWwwwwvwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwWwwwwwwwwWwwwwwwwvwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwwvwwwWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwWWWwWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwwWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWwwwwwwwwwwWwwwwwwWWWwWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwwwwwwWWwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwWWwWWWWWWwWwwwwwwwwwwwvwwWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWwwwwwWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWwwwwwwwwwwwwWWWwvwwvwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwWWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWwwWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwWwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWwWWWWWWWWWWWwvwwWWwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwWWwWWWwvwwWWWwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWWWWWWwwwwWwwWWwWwwwwwwwwvwvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWwwwwwwWWwwwwwwWWWWWWwWwwwwwwwwwWwvwwvwwWWwwwwWwwvwWwwwwwwwwwwWWWwWWWwwwwwwwwwWWWWWwWWWWWwwwwwwwwwwwwWWwWWWWWwvwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwWWWWWWwvwwwwwWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWwWWWWWWWWWwwwwwwwWwwwwwwwWwwwwwwwWWWWwWWWWWWWWWWWwwwwwwWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWwWwwwwwwwwwwwwwWWWWWwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwWWWWwWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwWWWWWWwwwwwwWwwwwwwwwwwwwwwwwWwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwWwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwvwWwwWwwwwwwwwwwwvwwWWwwWWWWwwWwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwWWwWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWwvWwvwvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWwwwWWwWwwwwwwwwwwwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwWWwvwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwWWWWwvwwwwwWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWWwWwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWwwWwwwwWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwvwWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWwWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwvwwwwWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwWWWWwwwwwwwwwwwwwwwwwwwwWwwwwwwwWWWwWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWwWWWwwwWwwWwwwwwwwwwwwWwvwWWWWWWWWWWWWWWWwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw VwvWWWWwwwwvwWwwvwwvwWwwvwwwWwwwWwwwvWWWWWWWWwwwwwwwwwvwWWWWWWwWwwwwwwwwwwwwvwwWWWWWwwwwwwwwwwwwwWWWWWWwwwWwwwWWWwvwWWWWWWwWWWWWWWWWwvwWWWWWWWwWWWWWWWWwvwwwWWWwwWwwWWWWwvwWWWWWWWWWwWWWWWWWWWWWWwvwWWWWWWWWWWwWWWWWWWWWWWwvwwWWWWwwWWWWWWwWWWWWWWWWWWWWwwwWWWWWWwwwwwWWwWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwwWwwwWWWwvWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWwvwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWwwvwWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWwWWWWwvwWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWwWWWWWwvwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwWWWWWWWwwWWwWwwwwwvwWWWWWWWWWWWWWWWWWWwwwwwwwwWwwvwWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwwwwwwwWWWWwwwwwwwWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWWWWWwWWWWWWWwvwwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWwwwWwwwWWWwvwWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWwvwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWwvwwWWwvwwWWwWWWwvwwvWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwwwWWWwvwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWwwwwwwwwwwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwWwwWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWwwwWwwvWwwvwWWWWWWWWWWWWWWWWWWWWWWWwWwwWWWWWWWWWWWWWWWwWwwwwwwwwwwwvWwwwwvwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwWwwwwwwwwWwwwwwwwvwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWwwvwwwWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwWWWwWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwwWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWwwwwwwwwwwWwwwwwwWWWwWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwwwwwwWWwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwWWwWWWWWWwWwwwwwwwwwwwvwwWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWwwwwwWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWwwwwwwwwwwwwWWWwvwwvwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwWWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWwwWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwWwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWwWWWWWWWWWWWwvwwWWwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwwWWwWWWwvwwWWWwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWWWWWWwwwwWwwWWwWwwwwwwwwvwvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWwWwwwwwwWWwwwwwwWWWWWWwWwwwwwwwwwWwvwwvwwWWwwwwWwwvwWwwwwwwwwwwWWWwWWWwwwwwwwwwWWWWWwWWWWWwwwwwwwwwwwwWWwWWWWWwvwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwWWWWWWwvwwwwwWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWwWWWWWWWWWwwwwwwwWwwwwwwwWwwwwwwwWWWWwWWWWWWWWWWWwwwwwwWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWwWwwwwwwwwwwwwwWWWWWwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwWWWWwWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwWWWWWWwwwwwwWwwwwwwwwwwwwwwwwWwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwWwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwvwWwwWwwwwwwwwwwwvwwWWwwWWWWwwWwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwWWwWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWwvWwvwvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWwwwWWwWwwwwwwwwwwwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwWWwvwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwWWWWwvwwwwwWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWWwWwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwWwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWwwWwwwwWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwvwWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWwWwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwvwwwwWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWwwwwWWWWwwwwwwwwwwwwwwwwwwwwWwwwwwwwWWWwWWWWWwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWwWWWwwwWwwWwwwwwwwwwwwWwvwWWWWWWWWWWWWWWWwWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw VwWWwwww $ time grass grass.grass < examples/grass3w.grass w real 0m31.284s user 0m31.516s sys 0m0.422s
grass.grass3段重ね on grass.c。まだ動いてる
$ time grass grass.grass < examples/grass3hello.grass Hello, world! real 8m3.880s user 8m54.188s sys 0m1.938s
Hello world on grass.grass3段重ね on grass.c は8分かかってなんとか完遂。Quine on 3段重ねは流石に暑くなってきたので止めました。
最初は2段重ねが出来たらいいなーくらいの気持ちだったので3段行けたのは嬉しいですね。
余談
grassのCharの適用規則なんですけど、公式の説明とSML実装を読む限りではOutやらSuccやらのCharでない物を引数として渡すとチャーチboolのfalseが返ってくるようになってるっぽいんですが、
fun charEq (CH c1, CH c2) = if c1 = c2 then churchTrue else churchFalse | charEq _ = churchFalse
公式のruby(1.8)実装やgolf場で採用されてるOCaml実装ではChar以外を渡すとエラーになっちゃうんですよね。 エラー終了するのではなくfalseを返してくれる方が色々と便利なので、うちのリポジトリに置いてある実装はどれもfalseを返すようにしてあります。