Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A simple Reverse Polish Notation calculator in Ruby
Branch: master


latest commit 899063b6e8
@txus authored
Failed to load latest commit information.
lib Add compatibility with rubygems-test
.gemtest Add compatibility with rubygems-test
.rspec Add compatibility with rubygems-test
.rvmrc Words
Gemfile first commit
Gemfile.lock Conflicts
Rakefile RSpec to minitest Words

Reverse Polish Notation calculator

A simple implementation of a RPN (also known as postfix notation) calculator.

In a nutshell, this notation consists of operands followed by their operators. As opposed to express an operation like this...

(3 + 4) * 7 - 1 reverse Polish notation it would look like this:

7 3 4 + * 1 -

It basically works like a stack in which you push operands until you find an operator; given an arity n, you evaluate this operator with n numbers from the stack, and substitute them for their result. Check out the Wikipedia article to learn more about this notation.


gem install rpn


Just require it in your Gemfile:

gem 'rpn'

Note: If you are not using Bundler, you should require 'rpn' manually.

Now you have to initialize a calculator. You can provide a custom n arity (the number of operands that will get evaluated by each operator). Default arity is 2. You can also provide the delimiter the parser will use (will be ' ' by default).

my_rpn = # => will use the defaults
my_rpn.solve "7 3 4 + * 1 -"
# => 48

For now, it supports the following operators:

+ - * / ^


  • Fork the project.
  • Make your feature addition or bug fix.
  • Add specs for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. If you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull.
  • Send me a pull request. Bonus points for topic branches.


Copyright (c) 2011 Josep M. Bach. See LICENSE for details.

Something went wrong with that request. Please try again.