RosettaCodeData/Task/Parsing-RPN-calculator-algo.../PascalABC.NET/parsing-rpn-calculator-algo...

16 lines
372 B
ObjectPascal

##
var a := new Stack<real>;
var b := new Dictionary<string, (real, real) -> real>;
b['+'] := (x, y) -> y + x;
b['-'] := (x, y) -> y - x;
b['*'] := (x, y) -> y * x;
b['/'] := (x, y) -> y / x;
b['^'] := (x, y) -> y ** x;
foreach var c in '3 4 2 * 1 5 - 2 3 ^ ^ / +'.Split do
begin
if c in b then a.Push(b[c](a.Pop, a.Pop))
else a.Push(c.ToReal);
println(c, a);
end;