状態付き 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

特定のコマンドの連続を受け付けるオートマトンとか言うと、かっこ良く聞こえるかもしれない(べつにかっこよくない)。
表と裏が繋がっているメビウスの輪みたい。