class Descartes::RPN

Public Instance Methods

help(m) click to toggle source
# File lib/descartes/modules/rpn.rb, line 39
def help(m)
  m.reply '!rpn n1 n2 (...) n3 [+|-|*|/|^]'
end
rpn(m) click to toggle source
# File lib/descartes/modules/rpn.rb, line 20
def rpn(m)
  query = m.params[1].split('!rpn ')[1]

  m.reply [].tap { |res|
    query.split.each { |i|
      case i
        when /\d/
          res << i.to_f
        when ?+, ?-, ?*, ?/, ?^
          i = '**' if i == ?^
          res << [].tap { |a|
            a << res.pop while res.last.class == Float
          }.inject(i)
      end
    }
  }.last
end