cm20256-exam/polynom.hs

23 lines
719 B
Haskell
Raw Normal View History

2024-05-08 09:41:51 +01:00
data Atree = Number Int | Variable String | Plus Atree Atree | Minus Atree | Times Atree Atree
2024-05-08 10:18:41 +01:00
-- (5 - x) * (2y - (x + 7)))
2024-05-08 09:41:51 +01:00
t :: Atree
t =
Times
(Plus (Number 5) (Minus (Variable "x")))
( Plus
(Times (Number 2) (Variable "y"))
(Minus (Plus (Variable "x") (Number 7)))
)
type Polynomial = [Monomial]
type Monomial = (Int, [String])
polynomial :: Atree -> Polynomial
2024-05-08 10:18:41 +01:00
polynomial (Number n) = [(n, [])]
polynomial (Variable v) = [(1, [v])]
polynomial (Plus e1 e2) = polynomial e1 ++ polynomial e2
polynomial (Minus e) = map (\(c, xs) -> (-c, xs)) (polynomial e)
polynomial (Times e1 e2) = concatMap (\(c1, xs1) -> map (\(c2, xs2) -> (c1 * c2, xs1 ++ xs2)) (polynomial e2)) (polynomial e1)