もうちょっと最適化

型宣言を見直してメモリー効率UP。タプルの中にバリアントよりもバリアントの中にタプルの方が良いです。
あと末尾再帰対応……といってもOCamlの式上で末尾再帰させただけの手抜きですがとりあえずwWwでスタックオーバーフローしないようになりました。

yt@THALES /d/Programming/tests/grass
$ time grass.byte.exe quine-endo.grass > z1

real    0m1.683s
user    0m0.010s
sys     0m0.010s

yt@THALES /d/Programming/tests/grass
$ time grass.opt.exe quine-endo.grass > z1

real    0m0.130s
user    0m0.010s
sys     0m0.010s

yt@THALES /d/Programming/tests/grass
$ time grass.byte.exe quine-kik.grass > z1

real    0m1.512s
user    0m0.020s
sys     0m0.000s

yt@THALES /d/Programming/tests/grass
$ time grass.opt.exe quine-kik.grass > z1

real    0m0.130s
user    0m0.010s
sys     0m0.010s

性能の変化としてはバイトコード版でかなり悪化してネイティブ版で微妙に改善してます。私はネイティブ厨なのでOKです。