Parsing/RPN to infix conversion: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: Added trace of stack, updated output.) |
(→{{header|Haskell}}: Tidied) |
||
Line 1,915: | Line 1,915: | ||
data Expression = Const String | Exp Expression String Expression |
data Expression = Const String | Exp Expression String Expression |
||
------------- INFIX EXPRESSION FROM RPN STRING ----------- |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
infixFromRPN :: String -> Expression |
|||
⚫ | |||
infixFromRPN = head . foldl buildExp [] . words |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
buildExp :: [Expression] -> String -> [Expression] |
buildExp :: [Expression] -> String -> [Expression] |
||
Line 1,963: | Line 1,932: | ||
isOp = (`elem` ["^", "*", "/", "+", "-"]) |
isOp = (`elem` ["^", "*", "/", "+", "-"]) |
||
--------------------------- TEST ------------------------- |
|||
main :: IO () |
main :: IO () |
||
main = |
main = |
||
Line 1,968: | Line 1,939: | ||
( \s -> |
( \s -> |
||
putStr (s <> "\n-->\n") |
putStr (s <> "\n-->\n") |
||
>> (print . |
>> (print . infixFromRPN) |
||
s |
s |
||
>> putStrLn [] |
>> putStrLn [] |
||
Line 1,977: | Line 1,948: | ||
"1 2 * 3 4 * *", |
"1 2 * 3 4 * *", |
||
"1 2 + 3 4 + +" |
"1 2 + 3 4 + +" |
||
] |
] |
||
---------------------- SHOW INSTANCE --------------------- |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
{{Out}} |
{{Out}} |
||
<pre>3 4 2 * 1 5 - 2 3 ^ ^ / + |
<pre>3 4 2 * 1 5 - 2 3 ^ ^ / + |