packages feed

hid-examples-0.3: expr/rpnexpr.hs

import qualified EvalRPN as E
import qualified EvalRPN_trans as E1
import qualified EvalRPN_trans2 as E2

import Control.Monad (mapM_, when)
import Data.Maybe

rpns = ["42",
        "12 13 +",
        "2 3 3 * + 5 *",
        "1 1 2 + 2 2 1 2 + * + * 1 3 2 * + + +",
        "13 2 12 2 1 2 13 2 + + + + + + +",
        "1 2 132 22 1 22 0 2 * * * * * * *",
        "10 1 2 + 2 2 1 2 * + * * * 1 3 2 + + +"]

showEvalRes :: String -> String
showEvalRes e = e ++ " = " ++ maybe "ERROR" show (E1.evalRPN e) 

main = do
  print $ E.evalRPN "2 3 +"
  print $ E1.evalRPN "2 x +"
  print $ E2.evalRPN "x 3 +"
  let res1 = map E1.evalRPN rpns
  mapM_ (putStrLn . showEvalRes) rpns    
  let    res2 = map E2.evalRPN rpns
  when (res1 == res2) $ putStrLn "E2 OK"