A simple Reverse Polish Notation calculator in Ruby
Ruby
Latest commit 899063b Apr 8, 2011 @txus Conflicts
Permalink
Failed to load latest commit information.
lib Add compatibility with rubygems-test Feb 2, 2011
test RSpec to minitest Apr 8, 2011
.gemtest Add compatibility with rubygems-test Feb 2, 2011
.gitignore first commit Jan 8, 2011
.rspec Add compatibility with rubygems-test Feb 2, 2011
.rvmrc Words Jan 9, 2011
Gemfile first commit Jan 8, 2011
Gemfile.lock Conflicts Apr 8, 2011
Rakefile RSpec to minitest Apr 8, 2011
Readme.md Words Jan 9, 2011
rpn.gemspec RSpec to minitest Apr 8, 2011

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.