「つくって学ぶプログラミング言語 RubyによるScheme処理系の実装」を読みはじめた
1.2 はじめてのプログラムの評価のところ。
サンプルのパーサをrubyで書いてはいるんだけど、scheme風にするために(is_a? Arrayしてるのをあえてdef list?定義してたり)で書かれていて読むのがつらかった。
とりあえず動きだけ把握したいなーと思って、rubyだけのシンプルな感じで書いてみる。
def primetive_fun(exp) {:+ => lambda{|x, y| x + y}, :- => lambda{|x, y| x - y}, :* => lambda{|x, y| x * y}, }[exp] end def _eval(exp) case exp when Array fun = _eval(exp[0]) args = exp[1..-1].map{|x|_eval(x)} fun.call(*args) when Numeric exp else primetive_fun(exp) end end p _eval([:+ ,[:-, 1, 5],13]) =>9