■
http://shinh.skr.jp/m/?date=20080823#p01
>RubyコードをRubyで等価に実行可能な記号だけに変換する プログラムは書けるだろうか。
eval"実行したいコード"
を記号だけで表現すればいんじゃね?
と適当に変換プログラム書いてみた。
def _(_) r="''<<"+_.split("").map{|_| _=_.ord; return "~-_" if _==0 (["_"]*(_&3)+["__"]*(_>>2&3)+["___"]*(_>>4&3)+["____"]*(_>>6&3))*"+" }*"<<" "->{_=-~($$-$$);__=_<<_+_;___=_<<__;____=__<<__;%s}[]"%r end puts"->&_{_}[&:\"\#{#{_"method"}}\"][$$,:\"\#{#{_"eval"}}\"][#{_([*$<]*"")}]"
標準入力にRubyのコードを渡すとあら不思議。記号だけのRubyコードが。
手持ちのRuby1.9の処理系だと動いたけどなぜ動くのか自分でもいまいち理解していない。
適当に書いたらたぶんうまく動いている気分になった。
ToDo:
エンコーディングが冗長。