Libraryless. Click here for Pure Java version (5318L/30K).
1 | // sequence can contain operators (+, -, *, /), Doubles or string-encoded doubles |
2 | srecord CalcRPN(L sequence) is Steppable {
|
3 | int i; |
4 | new DoubleList stack; |
5 | |
6 | run { stepAll(this); }
|
7 | |
8 | bool done() { ret i >= l(sequence); }
|
9 | |
10 | public bool step() {
|
11 | if (done()) false; |
12 | O o = sequence.get(i++); |
13 | if (eq(o, "*")) perform((a, b) -> a * b); |
14 | else if (eq(o, "/")) perform((a, b) -> doubleRatio(a, b)); |
15 | else if (eq(o, "+")) perform((a, b) -> a + b); |
16 | else if (eq(o, "-")) perform((a, b) -> a - b); |
17 | else if (eq(o, "u-")) perform(a -> -a); |
18 | else if (o cast S) |
19 | handleUnknownString(o); |
20 | else |
21 | stack.add(toDouble(o)); |
22 | true; |
23 | } |
24 | |
25 | void handleUnknownString(S s) {
|
26 | stack.add(toDouble(trim(s))); |
27 | } |
28 | |
29 | void perform(IF2<Double> f) {
|
30 | var arg2 = popLast(stack); |
31 | var arg1 = popLast(stack); |
32 | stack.add(f.get(arg1, arg2)); |
33 | } |
34 | |
35 | void perform(IF1<Double> f) {
|
36 | stack.add(f.get(popLast(stack))); |
37 | } |
38 | |
39 | double get() {
|
40 | run(); |
41 | assertEquals(1, l(stack)); |
42 | ret last(stack); |
43 | } |
44 | } |
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1032662 |
| Snippet name: | CalcRPN - calculate reverse polish notation |
| Eternal ID of this version: | #1032662/11 |
| Text MD5: | 31a1f3dcb1533e50eec3b0a7c56bc552 |
| Transpilation MD5: | 6a7f98cb8ba0ad4c001c0ba19215e329 |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-10-02 00:58:25 |
| Source code size: | 1086 bytes / 44 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 410 / 602 |
| Version history: | 10 change(s) |
| Referenced in: | [show references] |