33 lines
632 B
Text
33 lines
632 B
Text
|
|
isOp=: '_+-*/^' e.~ {.@>@{.
|
||
|
|
mo=: 1 :'(}: , u@{:) @ ['
|
||
|
|
dy=: 1 :'(_2&}. , u/@(_2&{.)) @ ['
|
||
|
|
dispatch=: (-mo)`(+dy)`(-dy)`(*dy)`(%dy)`(^dy)@.('_+-*/^' i. {.@>@])
|
||
|
|
doShift=: (<@, ".@>@{.) , }.@]
|
||
|
|
doApply=: }.@] ,~ [ <@dispatch {.@]
|
||
|
|
consume=: [: ([ smoutput@>@{.) >@{. doShift`doApply@.(isOp@]) }.
|
||
|
|
consume ^: (<:@#) a: , <;._1 ' ' , '3 4 2 * 1 5 - 2 3 ^ ^ / +'
|
||
|
|
3
|
||
|
|
3 4
|
||
|
|
3 4 2
|
||
|
|
3 8
|
||
|
|
3 8 1
|
||
|
|
3 8 1 5
|
||
|
|
3 8 _4
|
||
|
|
3 8 _4 2
|
||
|
|
3 8 _4 2 3
|
||
|
|
3 8 _4 8
|
||
|
|
3 8 65536
|
||
|
|
3 0.00012207
|
||
|
|
3.00012
|
||
|
|
┌───────┐
|
||
|
|
│3.00012│
|
||
|
|
└───────┘
|
||
|
|
consume ^: (<:@#) a: , <;._1 ' ' , '3 _ 4 +'
|
||
|
|
3
|
||
|
|
_3
|
||
|
|
_3 4
|
||
|
|
1
|
||
|
|
┌─┐
|
||
|
|
│1│
|
||
|
|
└─┘
|