Class: Descartes::RPN

Inherits:
Object
  • Object
show all
Includes:
Cinch::Plugin
Defined in:
lib/descartes/modules/rpn.rb

Instance Method Summary collapse

Instance Method Details

#help(m) ⇒ Object



39
40
41
# File 'lib/descartes/modules/rpn.rb', line 39

def help(m)
  m.reply '!rpn n1 n2 (...) n3 [+|-|*|/|^]'
end

#rpn(m) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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