diff options
Diffstat (limited to 'solveRPN.hs')
-rw-r--r-- | solveRPN.hs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/solveRPN.hs b/solveRPN.hs new file mode 100644 index 0000000..051999d --- /dev/null +++ b/solveRPN.hs @@ -0,0 +1,15 @@ +import Data.List +import Control.Monad +import Text.Read + +foldingFunction :: [Double] -> String -> Maybe [Double] +foldingFunction (x:y:ys) "*" = return ((y * x):ys) +foldingFunction (x:y:ys) "/" = return ((y / x):ys) +foldingFunction (x:y:ys) "+" = return ((y + x):ys) +foldingFunction (x:y:ys) "-" = return ((y - x):ys) +foldingFunction xs numberString = liftM (:xs) (readMaybe numberString) + +solveRPN :: String -> Maybe Double +solveRPN st = do + [result] <- foldM foldingFunction [] (words st) + return result |