23 lines
719 B
Haskell
23 lines
719 B
Haskell
data Atree = Number Int | Variable String | Plus Atree Atree | Minus Atree | Times Atree Atree
|
|
|
|
-- (5 - x) * (2y - (x + 7)))
|
|
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
|
|
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)
|