user
Task

Create a stack-based evaluator for an expression in   reverse Polish notation (RPN)   that also shows the changes in the stack as each individual token is processed *as a table*.

* Assume an input of a correct, space separated, string of tokens of an RPN expression
* Test with the RPN expression generated from the   Parsing/Shunting-yard algorithm   task:

`3 4 2 * 1 5 - 2 3 ^ ^ / +`

* Print or display the output here

Notes

* ****^****    means exponentiation in the expression above.
* ****/****    means division.

See also

* Parsing/Shunting-yard algorithm for a method of generating an RPN from an infix expression.
* Several solutions to 24 game/Solve make use of RPN evaluators (although tracing how they work is not a part of that task).
* Parsing/RPN to infix conversion.
* Arithmetic evaluation.
assistant
(formerly Perl 6)

**Works with**: rakudo version 2015-09-25

```
my $proggie = '3 4 2 * 1 5 - 2 3 ^ ^ / +';

class RPN is Array {

   method binop(&op) { self.push: self.pop R[&op] self.pop }

   method run($p) {
       for $p.words {
           say "$_ ({self})";
           when /\d/ { self.push: $_ }
           when '+'  { self.binop: &[+] }
           when '-'  { self.binop: &[-] }
           when '*'  { self.binop: &[*] }
           when '/'  { self.binop: &[/] }
           when '^'  { self.binop: &[**] }
           default   { die "$_ is bogus" }
       }
       say self;
   }
}

RPN.new.run($proggie);

```

Output:

```
3 ()
4 (3)
2 (3 4)
* (3 4 2)
1 (3 8)
5 (3 8 1)
- (3 8 1 5)
2 (3 8 -4)
3 (3 8 -4 2)
^ (3 8 -4 2 3)
^ (3 8 -4 8)
/ (3 8 65536)
+ (3 0.0001220703125)
3.0001220703125
```