(* calculs sur les polynomes *)let reduit_poly p = let rec aux = function | [] -> [] | 0::q -> aux q | q -> q in rev(aux(rev p)) ;;let add_poly p q = let rec add = function | (a::p,b::q) -> (a+b)::(add(p,q)) | (p,[]) -> p | ([],q) -> q in reduit_poly(add(p,q)) ;;let scale_poly k p = reduit_poly(map (prefix * k) p) ;;let decale_poly k p = let rec aux q = function | 0 -> q | s -> aux (0::q) (s-1) in reduit_poly(aux p k) ;;let mul_poly p q = let rec mul = function | ([],_) | (_,[]) -> [] | (p,t::q) -> let r = scale_poly t p and s = mul(decale_poly 1 p,q) in add_poly r s in mul(p,q) ;;let print_poly p = let tete = function | (0,t) -> print_int t | (1,1) -> print_string "X" | (1,-1) -> print_string "-X" | (1,t) -> print_int t ; print_string "X" | (k,1) -> print_string "X^" ; print_int k | (k,-1) -> print_string "-X^" ; print_int k | (k,t) -> print_int t ; print_string "X^" ; print_int k in let autre = function | (k,t) when t<0 -> tete(k,t) | (k,t) -> print_string "+" ; tete(k,t) in let rec deb k = function | [] -> print_string "0" | 0::q -> deb (k+1) q | t::q -> tete(k,t); suite (k+1) q and suite k = function | [] -> () | 0::q -> suite (k+1) q | t::q -> autre(k,t); suite (k+1) q in deb 0 p ;;