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│ └─┘