type poly = Zero | Un | X | Add of poly * poly | Mult of poly * poly | Scal of poly * float;;
let rec eval x = function
| Zero -> 0.
| Un -> 1.
| X -> x
| Add(a,b) -> (eval x a) +. (eval x b)
| Mult(a,b) -> (eval x a) *. (eval x b)
| Scal(a,b) -> (eval x a) *. b
;;
type point = {x: float; y: float};;
let new_point px py = {x=px;y=py;};;
let rec interpolate=function
| ([], j) -> Un
| (hd::lt, j) ->
if j==0 then
interpolate (lt, j-1)
else
Mult(
Add(X,Scal(Un,0. -. hd.x)),
interpolate (lt, j-1)
);;
let reponseInterpolate liste =
let rec f i = function
| [] -> Zero
| hd::lt -> let p=interpolate (liste, i) in
Add(
Scal ( p, hd.y /. (eval hd.x p) ),
f (i+1) lt
)
in f 0 liste;;