3 data Poly a = Poly [a]
\r
5 normalize l = go (length l)
\r
7 go i = if i > 0 && l!(i-1)==zero
\r
11 instance (Eq a, Additive a) => Additive (Poly a) where
\r
26 instance (Eq a, Ring a) => Ring (Poly a) where
\r
28 neg (Poly l) = Poly (map neg l)
\r
31 Poly ( if aDeg < bDeg
\r
32 then [ segSum n 0 n | n <- [0 ..aDeg] ]
\r
33 + [ segSum n 0 aDeg | n <- [aDeg+1..bDeg] ]
\r
34 + [ segSum n (n-bDeg) aDeg | n <- [bDeg+1..sumDeg] ]
\r
35 else [ segSum n 0 n | n <- [0 ..bDeg] ]
\r
36 + [ segSum n (n-bDeg) n | n <- [bDeg+1..aDeg] ]
\r
37 + [ segSum n (n-bDeg) aDeg | n <- [aDeg+1..sumDeg] ]
\r
42 sumDeg = aDeg + bDeg
\r
43 segSum n low high = sum [ a!i * b!(n-i) | i <- [low..high] ]
\r
44 fromInteger x = Poly [fromInteger x]
\r
46 a = Poly [4.0,5.0,8.0,3.0,2.0,1.0]
\r
47 b = Poly [1.0,0.0,2.0,1.0]
\r
48 main = a * a + a * b + b * a + b * b - (a+b)*(a+b)
\r