Add polynomials

From HaskellWiki
Revision as of 15:48, 6 November 2006 by Lemming (talk | contribs) (Category:Mathematics)
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 "Enter a person's name: "
       putStr $ show $ addPoly [(0,1),(2,1)] [(0,1)]