Université Paris 6
Licence d'informatique
Module de Programmation
Année 1999-2000


Travaux dirigés n° 4






Exercice 1

Typez les expressions suivantes en construisant la déduction correspondante. Les expressions sont indépendantes.
4 < 3;;
"debut " ^ "fin";;
4.0 * 6;;
string_of_int 34;;
4.0 >= 45.6;;
x = false;;
let y = 4 and z = "fin";;

Exercice 2

Typez la séquence d'expressions suivantes à partir de l'environnement initial Env-Init.
let x = false;;
let y = (x = true);;
let z = if x = true then false else true;;

Exercice 3


1. Typez la déclaration:
let f = function x -> x*x + 2;;

2. Typez la déclaration suivante dans un environnement contenant la liaison (x, int):
let f = function y -> x+y;;

3. Typez la déclaration suivante :
let f = function x -> function y -> function z -> x*y+z;;
Ensuite, Typez f 1 2 3;;.
4. Typez la déclaration suivante dans un environnement contenant la liaison (x, int):
let f = function x -> if x = 0 then 1 else 2;;
Ensuite, typez f 0;;
5. Typez la déclaration suivante dans un environnement contenant la liaison (x, int):
let f1 = function y -> if x = 1 then 1 else 2;;
Ensuite, typez f1 2;;
6. Comparer f1 à la fonction f2 suivante:
let f2 = if x = 1 then function y -> 1 else function y -> 2;;

Exercice 4

Le but de cet exercice est de réaliser une petite boite à outils (ie. un ensemble de fonctions) pour manipuler des vecteurs dans un espace en 3 dimensions.
1. Définissez un type vecteur pour représenter un vecteur dans un espace à 3 dimensions.
2. Écrivez et typez une fonction qui regarde si 2 vecteurs sont égaux.
3. Écrivez et typez une fonction qui additionne 2 vecteurs.
4. Écrivez et typez une fonction qui calcule le produit scalaire de deux vecteurs.
5. Écrivez et typez une fonction qui calcule le produit vectoriel de deux vecteurs.
Exercice 5

Donnez les résultats du typage de chacune des phrases de la session Caml suivantes. Ces phrases sont numérotées pour faciliter la rédaction. La session débute dans l'environnement E = Env-Init.

(1) #let code = 1900;; 
(2) # let g = let code = 10 
              in  function y -> y + code;;
(3) #g 25;;
(4) # code;;
(5) # let k = function (f,x) -> f (g (x-1)) + 2;;
(6) # k (function z -> z + code, 3) ;;
 

Exercice 6

Soit la déclaration :

let double_applic = function (f,x) -> f(f (x+1)) ;;
1. Typez cette déclaration.
2. Que calcule (double_applic (succ,25))?
3. Typez cette application.
Exercice 7

Typez la session suivante :
let x = 1 and y = 2;;
let x = 0 and y = x-1;;
let h = function f -> function g -> function z -> f ((g (x+z))+y);;
h 10;;
let x = 1 and y = x+1;;
h 10;;

Exercice 8

Soit le programme suivant:

let a = 1;;
let k = function y -> y - a;;
let h = function u -> u + k(u);;
let f = function v -> h(v) + v;;
Typez la déclaration:
f 25;;

Exercice 9

Reprendre l'exercice 1 du TD3 et typez les expressions données.
Ce document a été traduit de LATEX par HEVEA.