<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: RPN Calculator</title>
	<atom:link href="http://programmingpraxis.com/2009/02/19/rpn-calculator/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/</link>
	<description>A collection of etudes, updated weekly, for the education and enjoyment of the savvy programmer</description>
	<lastBuildDate>Sat, 11 Feb 2012 09:48:16 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: gary capell</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-4333</link>
		<dc:creator><![CDATA[gary capell]]></dc:creator>
		<pubDate>Sat, 11 Feb 2012 09:48:16 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-4333</guid>
		<description><![CDATA[https://github.com/gcapell/ProgrammingPraxis/blob/master/01_rpn_calculator/RPN.go

Not sure about keeping operators as a map-&gt;function (it might be cleaner/simpler just to have a switch).]]></description>
		<content:encoded><![CDATA[<p><a href="https://github.com/gcapell/ProgrammingPraxis/blob/master/01_rpn_calculator/RPN.go" rel="nofollow">https://github.com/gcapell/ProgrammingPraxis/blob/master/01_rpn_calculator/RPN.go</a></p>
<p>Not sure about keeping operators as a map-&gt;function (it might be cleaner/simpler just to have a switch).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: iodiot</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-3780</link>
		<dc:creator><![CDATA[iodiot]]></dc:creator>
		<pubDate>Mon, 24 Oct 2011 14:03:47 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-3780</guid>
		<description><![CDATA[[sourcecode lang=&quot;c&quot;]
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

const int MAX_LINE = 1024;
const int MAX_STACK = 1024;
const int MAX_OP = 10;

double stack[MAX_STACK];
int stack_ptr = 0;

void push_stack(double x)
{
	stack[stack_ptr++] = x;
}

double pop_stack()
{
	return stack[--stack_ptr];
}

double calculate(char* expr)
{
	char op[MAX_OP];
	char *expr_ptr = expr;

	while (sscanf(expr_ptr, &quot;%s&quot;, op) == 1)
	{
		expr_ptr += strlen(op) + 1;

		// Is operand?
		if ((strlen(op) == 1) &amp;&amp; (op[0] == &#039;+&#039; &#124;&#124; op[0] == &#039;-&#039; &#124;&#124; op[0] == &#039;*&#039; &#124;&#124; op[0] == &#039;/&#039;))
		{
			double y = pop_stack();
			double x = pop_stack();

			switch(op[0])
			{
			case &#039;+&#039;: push_stack(x + y); break;
			case &#039;-&#039;: push_stack(x - y); break;
			case &#039;*&#039;: push_stack(x * y); break;
			case &#039;/&#039;: push_stack(x / y); break;
			default: break;
			}
		} 
		else 
		{
			push_stack(atof(op));
		}
	}

	return pop_stack();
}

int main()
{
	char line[MAX_LINE];

	fgets(line, MAX_LINE, stdin);

	printf(&quot;%.4f\n&quot;, calculate(line));

	getchar();
	return 0;
}
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<pre class="brush: cpp;">
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

const int MAX_LINE = 1024;
const int MAX_STACK = 1024;
const int MAX_OP = 10;

double stack[MAX_STACK];
int stack_ptr = 0;

void push_stack(double x)
{
	stack[stack_ptr++] = x;
}

double pop_stack()
{
	return stack[--stack_ptr];
}

double calculate(char* expr)
{
	char op[MAX_OP];
	char *expr_ptr = expr;

	while (sscanf(expr_ptr, &quot;%s&quot;, op) == 1)
	{
		expr_ptr += strlen(op) + 1;

		// Is operand?
		if ((strlen(op) == 1) &amp;&amp; (op[0] == '+' || op[0] == '-' || op[0] == '*' || op[0] == '/'))
		{
			double y = pop_stack();
			double x = pop_stack();

			switch(op[0])
			{
			case '+': push_stack(x + y); break;
			case '-': push_stack(x - y); break;
			case '*': push_stack(x * y); break;
			case '/': push_stack(x / y); break;
			default: break;
			}
		}
		else
		{
			push_stack(atof(op));
		}
	}

	return pop_stack();
}

int main()
{
	char line[MAX_LINE];

	fgets(line, MAX_LINE, stdin);

	printf(&quot;%.4f\n&quot;, calculate(line));

	getchar();
	return 0;
}
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ignat Grob (@iodiot)</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-3779</link>
		<dc:creator><![CDATA[Ignat Grob (@iodiot)]]></dc:creator>
		<pubDate>Mon, 24 Oct 2011 13:57:15 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-3779</guid>
		<description><![CDATA[&lt;pre&gt;#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

const int MAX_LINE = 1024;
const int MAX_STACK = 1024;
const int MAX_OP = 10;

double stack[MAX_STACK];
int stack_ptr = 0;

void push_stack(double x)
{
    stack[stack_ptr++] = x;
}

double pop_stack()
{
    return stack[--stack_ptr];
}

double calculate(char* expr)
{
    char op[MAX_OP];
    char *expr_ptr = expr;

    while (sscanf(expr_ptr, &quot;%s&quot;, op) == 1)
    {
        expr_ptr += strlen(op) + 1;

        // Is operand?
        if ((strlen(op) == 1) &amp;&amp; (op[0] == &#039;+&#039; &#124;&#124; op[0] == &#039;-&#039; &#124;&#124; op[0] == &#039;*&#039; &#124;&#124; op[0] == &#039;/&#039;))
        {
            double y = pop_stack();
            double x = pop_stack();

            switch(op[0])
            {
            case &#039;+&#039;: push_stack(x + y); break;
            case &#039;-&#039;: push_stack(x - y); break;
            case &#039;*&#039;: push_stack(x * y); break;
            case &#039;/&#039;: push_stack(x / y); break;
&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;default: break;
            }
        } 
        else 
        {
            push_stack(atof(op));
        }
    }

    return pop_stack();
}

int main()
{
    char line[MAX_LINE];

    fgets(line, MAX_LINE, stdin);

    printf(&quot;%.4f\n&quot;, calculate(line));

    getchar();
    return 0;
}
&lt;/pre&gt;]]></description>
		<content:encoded><![CDATA[<pre>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

const int MAX_LINE = 1024;
const int MAX_STACK = 1024;
const int MAX_OP = 10;

double stack[MAX_STACK];
int stack_ptr = 0;

void push_stack(double x)
{
    stack[stack_ptr++] = x;
}

double pop_stack()
{
    return stack[--stack_ptr];
}

double calculate(char* expr)
{
    char op[MAX_OP];
    char *expr_ptr = expr;

    while (sscanf(expr_ptr, "%s", op) == 1)
    {
        expr_ptr += strlen(op) + 1;

        // Is operand?
        if ((strlen(op) == 1) &amp;&amp; (op[0] == '+' || op[0] == '-' || op[0] == '*' || op[0] == '/'))
        {
            double y = pop_stack();
            double x = pop_stack();

            switch(op[0])
            {
            case '+': push_stack(x + y); break;
            case '-': push_stack(x - y); break;
            case '*': push_stack(x * y); break;
            case '/': push_stack(x / y); break;
&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;default: break;
            }
        }
        else
        {
            push_stack(atof(op));
        }
    }

    return pop_stack();
}

int main()
{
    char line[MAX_LINE];

    fgets(line, MAX_LINE, stdin);

    printf("%.4f\n", calculate(line));

    getchar();
    return 0;
}
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: mlieb</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-3687</link>
		<dc:creator><![CDATA[mlieb]]></dc:creator>
		<pubDate>Thu, 29 Sep 2011 05:03:30 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-3687</guid>
		<description><![CDATA[Here&#039;s how I solved it with Python. There&#039;s not any error handling, but it&#039;s a single purpose program so I didn&#039;t really think it was necessary.


operators = &#039;+-/*&#039;

def get_input():
    input = raw_input(&quot;input: &quot;)
    return input

def number(num):
    if &#039;.&#039; in num:
        return float(num)
    elif num not in operators:
        return int(num)

def parse_input(text):
    text = text.split()
    stack = []
    for x in text:
        if x.isdigit() or number(x):
            stack.insert(0, number(x))
        elif x in operators:
            stack.insert(0, operate(stack, x))
    return stack

def operate(nums, operator):
    b = nums.pop(0)
    a = nums.pop(0)
    if operator == &#039;+&#039;:
        return a + b
    elif operator == &#039;-&#039;:
        return a - b
    elif operator == &#039;/&#039;:
        return a / b
    else: return a * b  

if __name__ == &#039;__main__&#039;:
    answer = parse_input(&#039;get_input&#039;)[0]
    print answer]]></description>
		<content:encoded><![CDATA[<p>Here&#8217;s how I solved it with Python. There&#8217;s not any error handling, but it&#8217;s a single purpose program so I didn&#8217;t really think it was necessary.</p>
<p>operators = &#8216;+-/*&#8217;</p>
<p>def get_input():<br />
    input = raw_input(&#8220;input: &#8220;)<br />
    return input</p>
<p>def number(num):<br />
    if &#8216;.&#8217; in num:<br />
        return float(num)<br />
    elif num not in operators:<br />
        return int(num)</p>
<p>def parse_input(text):<br />
    text = text.split()<br />
    stack = []<br />
    for x in text:<br />
        if x.isdigit() or number(x):<br />
            stack.insert(0, number(x))<br />
        elif x in operators:<br />
            stack.insert(0, operate(stack, x))<br />
    return stack</p>
<p>def operate(nums, operator):<br />
    b = nums.pop(0)<br />
    a = nums.pop(0)<br />
    if operator == &#8216;+&#8217;:<br />
        return a + b<br />
    elif operator == &#8216;-&#8217;:<br />
        return a &#8211; b<br />
    elif operator == &#8216;/&#8217;:<br />
        return a / b<br />
    else: return a * b  </p>
<p>if __name__ == &#8216;__main__&#8217;:<br />
    answer = parse_input(&#8216;get_input&#8217;)[0]<br />
    print answer</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dmitru</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-3319</link>
		<dc:creator><![CDATA[dmitru]]></dc:creator>
		<pubDate>Fri, 12 Aug 2011 19:30:15 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-3319</guid>
		<description><![CDATA[[sourcecode lang=&quot;python&quot;]
def rpn(expr):
    st = []
    for term in expr.split():
        if term in (&#039;+&#039;, &#039;-&#039;, &#039;*&#039;, &#039;/&#039;, &#039;%&#039;):
            op1 = st.pop()
            op2 = st.pop()
            res = eval(&#039;%f %s %f&#039; % (op2, term, op1))
            st.append(res)
        else:
            st.append(float(term))
    return st[0]

def main():
    while True:
        s = input(&#039;RPN&gt; &#039;)
        if s in (&#039;quit&#039;, &#039;exit&#039;):
            exit()
        if not s:
            continue
        print(&#039; &#039; * 4, end=&#039;&#039;)
        try:
            print(rpn(s))
        except ZeroDivisionError:
            print(&#039;Error: division by zero.&#039;)
        except (IndexError, ValueError):
            print(&#039;Error: the expression isn\&#039;t correct.&#039;)
       
if __name__ == &#039;__main__&#039;:
    main()
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<pre class="brush: python;">
def rpn(expr):
    st = []
    for term in expr.split():
        if term in ('+', '-', '*', '/', '%'):
            op1 = st.pop()
            op2 = st.pop()
            res = eval('%f %s %f' % (op2, term, op1))
            st.append(res)
        else:
            st.append(float(term))
    return st[0]

def main():
    while True:
        s = input('RPN&gt; ')
        if s in ('quit', 'exit'):
            exit()
        if not s:
            continue
        print(' ' * 4, end='')
        try:
            print(rpn(s))
        except ZeroDivisionError:
            print('Error: division by zero.')
        except (IndexError, ValueError):
            print('Error: the expression isn\'t correct.')

if __name__ == '__main__':
    main()
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: ftt</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-3146</link>
		<dc:creator><![CDATA[ftt]]></dc:creator>
		<pubDate>Sun, 19 Jun 2011 09:28:23 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-3146</guid>
		<description><![CDATA[My Python version is somewhat clumsy.

[sourcecode lang=&quot;python&quot;]
#!/usr/bin/env python


import operator
import sys
from numbers import Number


_OPERATORS = {
    &#039;+&#039;: operator.add,
    &#039;-&#039;: operator.sub,
    &#039;*&#039;: operator.mul,
    &#039;/&#039;: operator.div
}

class ParseException(Exception):
    pass

def _to_number(string):
    &#039;&#039;&#039;Accepts a string or and returns a number represented by that string.
    If a number is passed, that number is returned intact.&#039;&#039;&#039;
    if isinstance(string, Number):
        return string
    try:
        return int(string)
    except ValueError:
        return float(string)


def _calculate(stack):
    &#039;&#039;&#039;Takes a list representing an expression stack and solves the first expression found.
    Changes the list in place.&#039;&#039;&#039;
    op = None
    for op_index in xrange(len(stack)):
        if stack[op_index] in _OPERATORS.keys():
            op = stack[op_index]
            break
    if op is None or op_index &lt; 2:
        return
    left_operand, right_operand = stack[op_index - 2:op_index]
    try:
        left_operand = _to_number(left_operand)
        right_operand = _to_number(right_operand)
    except ValueError:
        raise ParseException(&#039;Unknown numbers&#039;)
    stack[op_index - 2] = _OPERATORS[op](left_operand, right_operand)
    stack[op_index - 1:] = stack[op_index + 1:]


def main():
    stack = []
    print &#039;RPN calculator. Enter an empty line to quit.&#039;
    while True:
        user_input = sys.stdin.readline().split()
        if not user_input:
            return
        stack.extend(user_input)
        old_len = len(stack)
        while True:
            try:
                _calculate(stack)
            except ParseException as e:
                print &#039;{0}\nStack is cleared.&#039;.format(e.message)
                stack = []
                break
            if len(stack) == old_len:
                break
            old_len = len(stack)
        print &#039;&gt; {0}&#039;.format(&#039; &#039;.join(str(n) for n in stack))


if __name__ == &#039;__main__&#039;:
    main()
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>My Python version is somewhat clumsy.</p>
<pre class="brush: python;">
#!/usr/bin/env python

import operator
import sys
from numbers import Number

_OPERATORS = {
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
    '/': operator.div
}

class ParseException(Exception):
    pass

def _to_number(string):
    '''Accepts a string or and returns a number represented by that string.
    If a number is passed, that number is returned intact.'''
    if isinstance(string, Number):
        return string
    try:
        return int(string)
    except ValueError:
        return float(string)

def _calculate(stack):
    '''Takes a list representing an expression stack and solves the first expression found.
    Changes the list in place.'''
    op = None
    for op_index in xrange(len(stack)):
        if stack[op_index] in _OPERATORS.keys():
            op = stack[op_index]
            break
    if op is None or op_index &lt; 2:
        return
    left_operand, right_operand = stack[op_index - 2:op_index]
    try:
        left_operand = _to_number(left_operand)
        right_operand = _to_number(right_operand)
    except ValueError:
        raise ParseException('Unknown numbers')
    stack[op_index - 2] = _OPERATORS[op](left_operand, right_operand)
    stack[op_index - 1:] = stack[op_index + 1:]

def main():
    stack = []
    print 'RPN calculator. Enter an empty line to quit.'
    while True:
        user_input = sys.stdin.readline().split()
        if not user_input:
            return
        stack.extend(user_input)
        old_len = len(stack)
        while True:
            try:
                _calculate(stack)
            except ParseException as e:
                print '{0}\nStack is cleared.'.format(e.message)
                stack = []
                break
            if len(stack) == old_len:
                break
            old_len = len(stack)
        print '&gt; {0}'.format(' '.join(str(n) for n in stack))

if __name__ == '__main__':
    main()
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: with-love-from-siberia</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-2310</link>
		<dc:creator><![CDATA[with-love-from-siberia]]></dc:creator>
		<pubDate>Tue, 18 Jan 2011 19:00:51 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-2310</guid>
		<description><![CDATA[JScript version of the task
&lt;pre&gt;
var RPN = {
	ops: {
		&#039;+&#039;: function(a, b) { return +a + +b; },
		&#039;-&#039;: function(a, b) { return a - b; },
		&#039;*&#039;: function(a, b) { return a * b; },
		&#039;/&#039;: function(a, b) { return a / b; },
		&#039;**&#039;: Math.pow
	},
	stack: [],
	eval: function(line)
	{
		var tokens = line.split(/\s+/);
		for (var i = 0; i &lt; tokens.length; i++) {
			var t = tokens[i];

			var op = this.ops[t];

			if ( ! op ) {
				this.error(isNaN(Number(t)), &#039;Illegal number.&#039;);

				this.stack.push(t);
				continue;
			}

			this.error(this.stack.length  &#039;);
	},
	input: function()
	{
		return WScript.StdIn.ReadLine();
	},
	alert: function(msg)
	{
		WScript.StdOut.WriteLine(msg.join(&#039;\n&#039;));
	},
	error: function(cond, msg)
	{
		if ( ! cond ) {
			return;
		}
		throw new Error(msg);
	},
	quit: function()
	{
		WScript.Quit();
	}
};

while ( true ) {
	RPN.prompt();
	RPN.alert(RPN.eval(RPN.input()));
}
&lt;/pre&gt;]]></description>
		<content:encoded><![CDATA[<p>JScript version of the task</p>
<pre>
var RPN = {
	ops: {
		'+': function(a, b) { return +a + +b; },
		'-': function(a, b) { return a - b; },
		'*': function(a, b) { return a * b; },
		'/': function(a, b) { return a / b; },
		'**': Math.pow
	},
	stack: [],
	eval: function(line)
	{
		var tokens = line.split(/\s+/);
		for (var i = 0; i &lt; tokens.length; i++) {
			var t = tokens[i];

			var op = this.ops[t];

			if ( ! op ) {
				this.error(isNaN(Number(t)), &#039;Illegal number.&#039;);

				this.stack.push(t);
				continue;
			}

			this.error(this.stack.length  ');
	},
	input: function()
	{
		return WScript.StdIn.ReadLine();
	},
	alert: function(msg)
	{
		WScript.StdOut.WriteLine(msg.join('\n'));
	},
	error: function(cond, msg)
	{
		if ( ! cond ) {
			return;
		}
		throw new Error(msg);
	},
	quit: function()
	{
		WScript.Quit();
	}
};

while ( true ) {
	RPN.prompt();
	RPN.alert(RPN.eval(RPN.input()));
}
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matthew</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-2297</link>
		<dc:creator><![CDATA[Matthew]]></dc:creator>
		<pubDate>Wed, 12 Jan 2011 02:02:43 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-2297</guid>
		<description><![CDATA[[sourcecode lang=&quot;jscript&quot;]
-module(rpncalc).
-export([init/1]).

init(RPNString) -&gt;
	parse(string:strip(RPNString), []).
	
parse_strip(RPNString, Args) -&gt;
	parse(string:strip(RPNString), Args).
	
parse([], Total) -&gt;
	Total;
parse([$*&#124;RPNString], [X2, X1&#124;Args]) -&gt;
	parse_strip(RPNString, [X1*X2&#124;Args]);
parse([$/&#124;RPNString], [X2, X1&#124;Args]) -&gt;
	parse_strip(RPNString, [X1/X2&#124;Args]);
parse([$+&#124;RPNString], [X2, X1&#124;Args]) -&gt;
	parse_strip(RPNString, [X1+X2&#124;Args]);
parse([$-&#124;RPNString], [X2, X1&#124;Args]) -&gt;
	parse_strip(RPNString, [X1-X2&#124;Args]);
parse(RPNString, Args) -&gt;
	{Arg, RPNString_1} = case string:to_float(RPNString) of
		{error, no_float} -&gt;
			string:to_integer(RPNString);
		Else -&gt;
			Else
	end,
	parse_strip(RPNString_1, [Arg&#124;Args]).
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<pre class="brush: jscript;">
-module(rpncalc).
-export([init/1]).

init(RPNString) -&gt;
	parse(string:strip(RPNString), []).

parse_strip(RPNString, Args) -&gt;
	parse(string:strip(RPNString), Args).

parse([], Total) -&gt;
	Total;
parse([$*|RPNString], [X2, X1|Args]) -&gt;
	parse_strip(RPNString, [X1*X2|Args]);
parse([$/|RPNString], [X2, X1|Args]) -&gt;
	parse_strip(RPNString, [X1/X2|Args]);
parse([$+|RPNString], [X2, X1|Args]) -&gt;
	parse_strip(RPNString, [X1+X2|Args]);
parse([$-|RPNString], [X2, X1|Args]) -&gt;
	parse_strip(RPNString, [X1-X2|Args]);
parse(RPNString, Args) -&gt;
	{Arg, RPNString_1} = case string:to_float(RPNString) of
		{error, no_float} -&gt;
			string:to_integer(RPNString);
		Else -&gt;
			Else
	end,
	parse_strip(RPNString_1, [Arg|Args]).
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: RPN Calculator (using Haskell) &#171; andreINC.net</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-2296</link>
		<dc:creator><![CDATA[RPN Calculator (using Haskell) &#171; andreINC.net]]></dc:creator>
		<pubDate>Wed, 12 Jan 2011 00:00:52 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-2296</guid>
		<description><![CDATA[[...] my last article I&#8217;ve presented some solutions (scala, java, python) for the RPN Calculator exercise from Programming Praxis . Today I am going to present you the solution in Haskell [...]]]></description>
		<content:encoded><![CDATA[<p>[...] my last article I&#8217;ve presented some solutions (scala, java, python) for the RPN Calculator exercise from Programming Praxis . Today I am going to present you the solution in Haskell [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RPN Calculator (using Scala, python and Java) &#171; andreINC.net</title>
		<link>http://programmingpraxis.com/2009/02/19/rpn-calculator/#comment-2264</link>
		<dc:creator><![CDATA[RPN Calculator (using Scala, python and Java) &#171; andreINC.net]]></dc:creator>
		<pubDate>Mon, 03 Jan 2011 22:39:44 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=19#comment-2264</guid>
		<description><![CDATA[[...] of the earliest Programming Praxis challenges is called RPN Calculator . Our task is to write a RPN module capable of evaluating simple RPN expressions and return the [...]]]></description>
		<content:encoded><![CDATA[<p>[...] of the earliest Programming Praxis challenges is called RPN Calculator . Our task is to write a RPN module capable of evaluating simple RPN expressions and return the [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

