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 ^ ^ / +")