状態付き Quine
scheme 処理系に食わせたら ruby のプログラムになって、それを ruby に食わせたらもとの scheme プログラムになって、以下繰り返し、というプログラムを書いてみました。
もっと複雑になるかと思ったらそうでもなかった。
(let ((s "(let ((s %p)(r %p)) (format #t r r s))") (r "r=~s;s=~s;puts s%[s,r]")) (format #t r r s))
こんな感じに gosh と ruby を繰り返して実行できる。
cat <<END | gosh | ruby | gosh | ruby | gosh | ruby (let ((s "(let ((s %p)(r %p)) (format #t r r s))") (r "r=~s;s=~s;puts s%[s,r]")) (format #t r r s)) END
特定のコマンドの連続を受け付けるオートマトンとか言うと、かっこ良く聞こえるかもしれない(べつにかっこよくない)。
表と裏が繋がっているメビウスの輪みたい。