Rubyで自己書換えプログラムを作る。

なんとなく。

% ruby -e 'ex = lambda{|e| puts e}; b = binding; STDIN.each{|l| ex.call(eval(l, b))}'
1 + 2
3
ex = lambda{|e| print "=> "; puts e} # ex update
#<Proc:0xb7f40a58@-e:1>
1 + 2
=> 3
ex = lambda{|e| print "=> "; puts e; print ": "}
=> #<Proc:0xb7f40760@-e:1>

=> nil
: 1 + 2
=> 3
: 

evalで自分自身を書換えながらプログラムを進化させることが出来る。