(********* Exercice 1 *********) (********* Exercice 2 *********) let x = true;; (* val x : bool = true *) x;; (* - : bool = true *) let x = sqrt;; (* val x : float -> float = *) x 4.;; (* - : float = 2. *) let f(y) = 2*y+3;; (* val f : int -> int = *) f(3);; (* - : int = 9 *) f(3.);; (* Expr has type float but is here used with type int *) let f(x) = 3.*.cos(x)**2.;; (* val f : float -> float = *) f(1.);; (* - : float = 0.875779745179286584 *) let val_abs x = if (x>0.) then x else (-.x);; (* val val_abs : float -> float = *) val_abs (-4.);; (* - : float = 4. *) (********* Exercice 3 *********) let make_even (f, x) = (f(x) +. f(-.x))/.2.;; (* val make_even : (float -> float) * float -> float = *) make_even (sin, 3.1415/.2.);; let deriv (f, epsilon, x) = (f(x +. epsilon) -. f(x -. epsilon)) /. (2.0 *. epsilon);; (* val deriv : (float -> float) * float * float -> float = *) deriv (sin, 0.1, 0.0);; (* - : float = 0.998334166468 *) Function,Function> make_even = f -> x -> (f.apply(x) + f.apply(-x)) / 2; Function,Function> make_odd = f -> x -> (f.apply(x) - f.apply(-x)) / 2; Function,Function>> deriv = eps -> f -> x -> (f.apply(x+eps)-f.apply(x-eps))/(2*eps); Function,Function> deriv_001 = deriv.apply(0.01); Function,Function> make_complex = f -> make_even.apply(deriv.apply(0.01).apply(make_even.apply(f))); System.out.println(make_even.apply(x->Math.cos(x)).apply(5.)); System.out.println(deriv.apply(0.001).apply(x->Math.cos(x)).apply(Math.PI/2)); System.out.println(deriv_001.apply(x->Math.cos(x)).apply(Math.PI/2)); System.out.println(make_complex.apply(x->Math.cos(x)).apply(1.0)); /exit (********* Exercice 4 *********) let rec fact n = if (n=0) then 1 else n*fact(n-1);; (* val fact : int -> int = *) fact 5;; (* - : int = 120 *) let rec newton f x eps = if (abs_float(f(x)) <= eps) then x else let der = deriv (f, eps, x) in newton f (x-.f(x)/.der) eps;; let pol x = x*.x;; newton pol 1. 0.001;; newton pol 1. 0.0001;; newton pol 1. 0.00001;; let approx_pi n = let rec approx_pi_rec n = if (n = 0) then 0 else let a = approx_pi_rec (n-1) in let u = Random.float 1. and v = Random.float 1. in if (u*.u+.v*.v<=1.) then (a+4) else a in (approx_pi_rec n,n);; approx_pi 10000;; approx_pi 100000;; approx_pi 262062;; approx_pi 262063;; (* Stack overflow *) (********* Exercice 5 *********) (* Refer to the file "/usr/lib/ocaml/list.ml" in your local *) (* OCaml distribution, that corresponds to the List module. *)