Add polynomials

From HaskellWiki
Revision as of 00:44, 5 September 2008 by Olathe (talk | contribs) (Entering a person's name not required for polynomial addition ;))
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Polynomial Algebra

#!/usr/local/bin/runhugs

module Main where

type Poly = [(Int,Int)] 
-- assume sorted by increasing exponent. 
-- data Rational =  (Poly, Poly)


-- an interesting thing to observe: 
-- when adding, the null polynomial is zero. 
-- when multiplying it is one.  This concept emerges implicitly 
-- in these definitions. 

addPoly :: Poly -> Poly -> Poly
addPoly [] ys = ys
addPoly xs [] = xs
addPoly ((a,b):xs) ((c,d):ys)
    | a == c  = ((a,b+d):(addPoly xs ys))
    | a < c = ((a,b):(addPoly xs ((c,d):ys)))
    | a > c = ((c,d):(addPoly ((a,b):xs) ys))

addManyPolys :: [Poly] -> Poly
addManyPolys ps = foldl 0 addPoly ps

multiply :: [Int] -> [Int] -> [Int]
--multiply polynomials together. 
multiply [] ys = ys
multiply xs [] = xs
multiply ((a,b):xs) ((c,d):ys) 


main = do
       putStr $ show $ addPoly [(0,1),(2,1)] [(0,1)]