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.


 
[ stack ]                                 is switch.arg (     --> [ )
 
[ switch.arg put ]                        is switch     (   x -->   )
 
[ switch.arg release ]                    is otherwise  (     -->   )
 
[ switch.arg share 
  != iff ]else[ done  
  otherwise
  ]'[ do ]done[ ]                         is case       (   x -->   )
 
[ say "Applying: "
  swap echo$ sp
  temp take
  temp take
  swap rot do 
  temp put ]                              is apply      ( $ x -->   )
 
[ say "Pushing:  " dup echo$ sp
  $->n drop temp put ]                    is isnumber   (   $ -->   )
 
[ temp copy echo cr ]                     is display    (     -->   )
 
[ nest$ witheach
    [ dup switch 
      [ $ '+' case [ ' +  apply ]
        $ '-' case [ ' -  apply ]
        $ '*' case [ ' *  apply ]
        $ '/' case [ ' /  apply ]
        $ '^' case [ ' ** apply ]
        otherwise  [ isnumber ] ]
      display ]
  temp take ]                             is rpncalc    (   $ --> n )
 
$ "3 4 2 * 1 5 - 2 3 ^ ^ / +" rpncalc
say "Result: " echo