RosettaCodeData/Task/Parsing-RPN-calculator-algo.../Phix/parsing-rpn-calculator-algo...

18 lines
701 B
Plaintext

procedure evalRPN(string s)
sequence stack = {}
sequence ops = split(s)
for i=1 to length(ops) do
string op = ops[i]
switch op
case "+": stack[-2] = stack[-2]+stack[-1]; stack = stack[1..-2]
case "-": stack[-2] = stack[-2]-stack[-1]; stack = stack[1..-2]
case "*": stack[-2] = stack[-2]*stack[-1]; stack = stack[1..-2]
case "/": stack[-2] = stack[-2]/stack[-1]; stack = stack[1..-2]
case "^": stack[-2] = power(stack[-2],stack[-1]); stack = stack[1..-2]
default : stack = append(stack,scanf(op,"%d")[1][1])
end switch
?{op,stack}
end for
end procedure
evalRPN("3 4 2 * 1 5 - 2 3 ^ ^ / +")