rpn: fix operator order issue (reported by Jason Merrill)

db4
Slava Pestov 2009-09-23 17:33:03 -05:00
parent a4524874f4
commit 9dd51d58de
2 changed files with 8 additions and 4 deletions

View File

@ -0,0 +1,4 @@
IN: rpn.tests
USING: rpn lists tools.test ;
[ { 2 } ] [ "4 2 -" rpn-parse rpn-eval list>array ] unit-test

View File

@ -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