From: Shin-ichiro HARA Date: 2002-05-15T17:38:18+09:00 Subject: [ruby-list:35132] Fixed Point of Ruby 原です。 そう言えば、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以上の周期軌道に落ちる場合の方が多いと思います。 なるほどねえ。そういう手もあるか。