[Haskell-beginners] if statements
Roel van Dijk
vandijk.roel at gmail.com
Sat Jan 23 13:17:55 EST 2010
On Sat, Jan 23, 2010 at 6:40 PM, John Moore <john.moore54 at gmail.com> wrote:
> Hi
> I'm trying to get a if statement to work but not sure if this is the
> right approach, what I want to do in simple english is to evaluate one
> expression at a time for example. (3+2)+(4+5) I want it to return 5 + (4+5)
> then 5+9.
>
> data Expression = Val Integer
> | Add Expression Expression
> | Subtract Expression Expression
> | Multiply Expression Expression
> | Divide Expression Expression
> deriving Show
> evalStep :: Expression -> Expression
> evalStep (Val x)= (Val x)
> evalStep (Add x y) = do
>
> if x = isDigit
> then if y isDigit
> else evalStep x,y
>
> I thinking about using recursion down a tree left then right but that seems
> very complicated.
> Any thoughts welcome!
> John
I renamed your Expression data type to simply E. Saves some typing :-)
data E = Val Integer
| Add E E
| Sub E E
| Mul E E
| Div E E
deriving Show
evalStep :: E -> E
evalStep (Val x) = (Val x)
-- Note that with a pattern match you can look deeply into a structure.
-- in this case we match on the addition of two values.
evalStep (Add (Val a) (Val b)) = Val (a + b)
evalStep (Add x@(Val _) y) = Add x (evalStep y)
evalStep (Add x y@(Val _)) = Add (evalStep x) y
You can copy the equations with "Add" and substitute with Sub, Mul and
Div and their related functions (-), (*) and div to get the complete
evalStep function.
Regards,
Roel
More information about the Beginners
mailing list