33 lines
632 B
Plaintext
33 lines
632 B
Plaintext
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│
|
|
└─┘
|