X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=extra%2Frpn%2Frpn.factor;h=dc8ec7b139b6cc0fe3531b85da090ec13ad72701;hp=7175746862fd8eccade8046478dedf4a20073172;hb=HEAD;hpb=4fac281b1aa26ad9ca2300d3b8eab7489ab91332 diff --git a/extra/rpn/rpn.factor b/extra/rpn/rpn.factor index 7175746862..e7ea4baf9f 100644 --- a/extra/rpn/rpn.factor +++ b/extra/rpn/rpn.factor @@ -1,5 +1,5 @@ ! Copyright (C) 2009 Slava Pestov -! See http://factorcode.org/license.txt for BSD license. +! See https://factorcode.org/license.txt for BSD license. USING: accessors combinators io kernel lists math math.parser sequences splitting ; IN: rpn @@ -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 swapd ] dip dip cons ; inline M: add-insn eval-insn drop [ + ] binary-op ; M: sub-insn eval-insn drop [ - ] binary-op ; @@ -19,7 +19,7 @@ M: div-insn eval-insn drop [ / ] binary-op ; M: push-insn eval-insn value>> swons ; : rpn-tokenize ( string -- string' ) - " " split harvest sequence>list ; + split-words harvest sequence>list ; : rpn-parse ( string -- tokens ) rpn-tokenize [ @@ -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