Parsing/RPN calculator algorithm: Difference between revisions

no edit summary
(→‎{{header|Perl}}: same logic, more readable)
No edit summary
Line 2,451:
 
result: 242.0000000000000</pre>
 
=={{header|M2000 Interpreter}}==
<lang M2000 Interpreter>
Module Rpn_Calc {
Rem Form 80,60
function rpn_calc(a$) {
def m=0
dim token$()
token$()=piece$(a$," ")
l=len(token$())
dim type(l)=0, reg(l)
where=-1
for i=0 to l-1
c=val(token$(i),"",m)
if m>-1 then
where++
reg(where)=c
else
reg(where-1)=eval(str$(reg(where-1))+token$(i)+str$(reg(where)))
where--
end if
inf=each(reg(),1, where+1)
while inf
export$<=token$(i)+" ["+str$(inf^,"")+"] "+ str$(array(inf))+{
}
token$(i)=" "
end while
next i
=reg(0)
}
Global export$
document export$
example1=rpn_calc("3 4 2 * 1 5 - 2 3 ^ ^ / +")
example2=rpn_calc("1 2 + 3 4 + ^ 5 6 + ^")
Print example1, example2
Rem Print #-2, Export$
ClipBoard Export$
}
Rpn_Calc
</lang>
 
{{out}}
<pre style="height:30ex;overflow:scroll">
3 [0] 3
4 [0] 3
[1] 4
2 [0] 3
[1] 4
[2] 2
* [0] 3
[1] 8
1 [0] 3
[1] 8
[2] 1
5 [0] 3
[1] 8
[2] 1
[3] 5
- [0] 3
[1] 8
[2] -4
2 [0] 3
[1] 8
[2] -4
[3] 2
3 [0] 3
[1] 8
[2] -4
[3] 2
[4] 3
^ [0] 3
[1] 8
[2] -4
[3] 8
^ [0] 3
[1] 8
[2] 65536
/ [0] 3
[1] .0001220703125
+ [0] 3.0001220703125
1 [0] 1
2 [0] 1
[1] 2
+ [0] 3
3 [0] 3
[1] 3
4 [0] 3
[1] 3
[2] 4
+ [0] 3
[1] 7
^ [0] 2187
5 [0] 2187
[1] 5
6 [0] 2187
[1] 5
[2] 6
+ [0] 2187
[1] 11
^ [0] 5.47440108942022E+36
 
</pre >
 
 
=={{header|Mathematica}}==
Anonymous user