ポーランド記法計算機

30分で何かをつくってみようシリーズ、その3。良いネタが思いつかなかったので、id:mzp:20070416:rpnの焼き直し。

手に馴染んだ言語なので、とても奇麗に書けた。

lhs.send op,rhs

あたりがすばらしいと思う。

def parse(tokens)
  op = tokens.shift
  if op =~ /\A\d+\Z/
    op.to_i
  elsif %w(+ - * / %).include?(op) then
    lhs = parse(tokens)
    rhs = parse(tokens)
    lhs.send op,rhs
  else
    raise
  end
end

puts parse(ARGV[0].split(' '))