Parsing/RPN calculator algorithm: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→Classically-oriented version: Remove vanity tags) |
(Added Bracmat solution) |
||
Line 546: | Line 546: | ||
+ : 3.00012 |
+ : 3.00012 |
||
</pre> |
</pre> |
||
=={{header|Bracmat}}== |
|||
<lang bracmat>( ( show |
|||
= line a |
|||
. \n:?line |
|||
& whl |
|||
' (!arg:%?a ?arg&!a " " !line:?line) |
|||
& put$(str$!line) |
|||
) |
|||
& :?stack |
|||
& map |
|||
$ ( ( |
|||
= a b |
|||
. show$(!arg !stack) |
|||
& ( !arg |
|||
: ( "+" |
|||
| "-" |
|||
| "*" |
|||
| "/" |
|||
| "^" |
|||
) |
|||
& !stack:%?a %?b ?stack |
|||
& ( !arg:"+"&!a+!b |
|||
| !arg:"-"&-1*!a+!b |
|||
| !arg:"*"&!a*!b |
|||
| !arg:"/"&!a*!b^-1 |
|||
| !a^!b |
|||
) |
|||
| !arg |
|||
) |
|||
!stack |
|||
: ?stack |
|||
) |
|||
. vap$((=.!arg).get'(,STR)." ") |
|||
) |
|||
& out$!stack |
|||
)</lang> |
|||
Input from keyboard: |
|||
<pre>3 4 2 * 1 5 - 2 3 ^ ^ / +</pre> |
|||
Output: |
|||
<pre>3 |
|||
3 4 |
|||
3 4 2 |
|||
3 4 2 * |
|||
3 8 1 |
|||
3 8 1 5 |
|||
3 8 1 5 - |
|||
3 8 -4 2 |
|||
3 8 -4 2 3 |
|||
3 8 -4 2 3 ^ |
|||
3 8 -4 9 ^ |
|||
3 8 1/6561 / |
|||
3 1/52488 + |
|||
157465/52488 |
|||
{!} 157465/52488</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |