X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=extra%2Frpn%2Frpn.factor;fp=extra%2Frpn%2Frpn.factor;h=ba697df8d1039f4ad489f571ad4a7c00f5820963;hp=7175746862fd8eccade8046478dedf4a20073172;hb=9dd51d58de73d23efdb58f35872790ee7a9c298a;hpb=a4524874f4aeca84d97c24c8fd8fdd0c7486cd98 diff --git a/extra/rpn/rpn.factor b/extra/rpn/rpn.factor index 7175746862..ba697df8d1 100644 --- a/extra/rpn/rpn.factor +++ b/extra/rpn/rpn.factor @@ -10,7 +10,7 @@ TUPLE: push-insn value ; GENERIC: eval-insn ( stack insn -- stack ) : binary-op ( stack quot: ( x y -- z ) -- stack ) - [ uncons uncons ] dip dip cons ; inline + [ uncons uncons [ swap ] dip ] dip dip cons ; inline M: add-insn eval-insn drop [ + ] binary-op ; M: sub-insn eval-insn drop [ - ] binary-op ; @@ -35,11 +35,11 @@ M: push-insn eval-insn value>> swons ; : print-stack ( list -- ) [ number>string print ] leach ; -: rpn-eval ( tokens -- ) - nil [ eval-insn ] foldl print-stack ; +: rpn-eval ( tokens -- stack ) + nil [ eval-insn ] foldl ; : rpn ( -- ) "RPN> " write flush - readln [ rpn-parse rpn-eval rpn ] when* ; + readln [ rpn-parse rpn-eval print-stack rpn ] when* ; MAIN: rpn