原です。

そう言えば、eval(str) == str となる文字列 str ってどうなるのでし
たっけ?求めてみようかと思ったのですが、文字列のエスケープで脳が
爆発してしまいました。


スクリプトのバージョンの方は、既に [ruby-list:6511] あたりにあり
ますが、例えば

-----^ self-repr.rb
f = "puts 'f = \"' + f.gsub(/[\\\\\"]/){\"\\\\\" + $&} + '\"', f"
puts 'f = "' + f.gsub(/[\\"]/){"\\" + $&} + '"', f
-----$ self-repr.rb

です。これを作るには、まず

-----^ self-fold.rb
gets; f = gets(nil).chop
puts 'f = "' + f.gsub(/[\\"]/){"\\" + $&} + '"', f
-----$ self-ent.rb

というのを作って

   $ ruby self-fold.rb self-fold.rb > self-repr.rb

とします。これは試行錯誤で見つけたのですが、今見るといかにも

   proc{|f| g[f[f]}[proc{|f| g[f[f]}]

と相似で、同じ考え方が出来る気がするけどよく分からない。


In [ruby-math:00748], GOTO Kentaro wrote:

 >確か More Programming Pearl だった思いますが、自己記述関数の
 >作り方として、エラー出力も出力に含めて任意のテキストを反復的
 >にコンパイラに食わせるといずれ収束するという話がありました。
 >しかし周期2以上の周期軌道に落ちる場合の方が多いと思います。

なるほどねえ。そういう手もあるか。