13 lines
562 B
Plaintext
13 lines
562 B
Plaintext
calc[rpn_] :=
|
|
Module[{tokens = StringSplit[rpn], steps},
|
|
steps = FoldList[
|
|
Switch[#2, _?DigitQ, Append[#, FromDigits[#2]], "^",
|
|
Append[#[[;; -3]], #[[-2]]^#[[-1]]], "*",
|
|
Append[#[[;; -3]], #[[-2]] #[[-1]]], "/",
|
|
Append[#[[;; -3]], #[[-2]]/#[[-1]]], "+",
|
|
Append[#[[;; -3]], #[[-2]] + #[[-1]]], "-",
|
|
Append[#[[;; -3]], #[[-2]] - #[[-1]]]] &, {}, tokens][[2 ;;]];
|
|
Grid[Transpose[{# <> ":" & /@ tokens,
|
|
StringRiffle[ToString[#, InputForm] & /@ #] & /@ steps}]]];
|
|
Print[calc["3 4 2 * 1 5 - 2 3 ^ ^ / +"]];
|