module RPNCalc; import std.stdio; import std.string; import std.conv; alias char[] mstring; void operator(mstring s, ref float[] stack) { switch (s) { case "+": stack[$-2] += stack[$-1]; break; case "-": stack[$-2] -= stack[$-1]; break; case "*": stack[$-2] *= stack[$-1]; break; case "/": stack[$-2] /= stack[$-1]; break; default: stack ~= to!(float)(s); return; } stack.length = stack.length -1; } void main() { float[] stack; while (true) { mstring data; readln(data); data = data.dup; mstring s; while ((s = munch(data, "-0123456789.+*/")) != "") { data = cast(mstring)strip(cast(string)data); operator(s, stack); } if (data.length > 0) { operator(data, stack); } writefln(stack); stack.length = 0; } }