Skip to content
A simple Reverse Polish Notation calculator in Ruby
Ruby
Find file
Latest commit 899063b @txus Conflicts
Failed to load latest commit information.
lib Add compatibility with rubygems-test
test
.gemtest
.gitignore
.rspec Add compatibility with rubygems-test
.rvmrc Words
Gemfile first commit
Gemfile.lock Conflicts
Rakefile
Readme.md
rpn.gemspec RSpec to minitest

Readme.md

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

...in 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.

Install

gem install rpn

Usage

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 = RPN::Calculator.new # => will use the defaults
my_rpn.solve "7 3 4 + * 1 -"
# => 48

For now, it supports the following operators:

+ - * / ^

Contribute!

  • 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

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

Something went wrong with that request. Please try again.