ss@arovane % sml ~ Standard ML of New Jersey v110.52 [built: Fri Jan 21 16:42:10 2005] - (* 3.6 *) - (* Polynomial Multiplication *) - - (* Example: = P = -5 + 2*x + 3*x^2 + x^3 = -> [~5, 2, 3, 1] = Q = 1 - 2*x^2 = -> [1, 0, ~2] = *) - - (* Sum: P = p + R*x, Q = q + S*x -> sum(P, Q) = (p+q) + (R+S)*x *) - val rec padd = fn (P, nil) => P | (nil, Q) => Q | ((p:real)::ps, q::qs) => (p+q)::padd(ps, qs); val padd = fn : real list * real list -> real list - - (* Simple Multiply: P = p + R*x, q -> smul(P, q) = p*q + q*R*x *) - val rec smul = fn (nil, q) => nil | ((p:real)::ps, q) => (p*q)::smul(ps, q); val smul = fn : real list * real -> real list - - (* Polynomial Multiply: = pmul(P, Q) = (p + R*x) * (q + S*x) = = p*q + (p*S + q*R)*x + R*S*x^2 = = q*(p + R*x) + S*x*(p + R*x) = = smul(P, q) + ... = *) - val rec pmul = fn (P, nil) => nil | (P, q::qs) => padd(smul(P, q), 0.0::pmul(P, qs)); val pmul = fn : real list * real list -> real list -