Université de Rouen Normandie UFR sciences et techniques
Licence 2 informatique et mathématiques 2021–2022
Bases de la programmation fonctionnelle 1/2
Contrôle continu no 1
Exercice 1 (Typage d’expression)
Typez les fonctions suivantes :
1. fun f x y -> if (f x) then 2 else y;;
2. fun f x y -> f (x, y);;
3. fun x y z -> (z y, z x);;
4. fun x y -> x (x y);;
5. fun x y -> x (y x);;
6. (fun x y z -> (y x) ** 2. +. z) 2;;
7. fun (x, y, z) -> fun x -> (x @ y, y, z);;
8. fun f x ->
if fst (f (fst x)) = (snd x)
then (snd (f (fst x)))
else (snd (f (fst x)));;
Exercice 2 (Interprétation d’expression)
Déterminez la valeur des expressions suivantes :
1. [Link] ((+) 1) [3; 11; 17; 21; 5];;
2. List.fold_left max 0 [5; 1; 10; 2];;
3. [Link] (fun (_,x) -> x <> 0 ) [(1,0); (2,1); (3,0); (0,4)] ; ;
Université de Rouen Normandie UFR sciences et techniques
Licence 2 informatique et mathématiques 2021–2022
Bases de la programmation fonctionnelle 2/2
Exercice 3 (Manipulation de listes)
Il faudra impérativement utiliser les fonctions du module List données en annexe pour toutes les
opérations sur les listes, ou réutiliser les fonctions demandées dans des questions précédentes.
1. Écrivez la fonction projection qui , pour une liste de couples, renvoie la liste composée de
la première coordonnée de ces couples. L’ordre des éléments sera préservé. Par exemple :
projection [(1, 2); (3, 4); (5,6)];;
- : int list = [1; 3; 5]
2. En utilisant la fonction List.fold_left, écrivez la fonction renverse qui renverse une
liste.
3. Écrivez la fonction suffixes qui renvoie la liste des suffixes d’une liste. L’ordre des éléments
de cette liste n’a pas d’importance. Par exemple :
suffixes [1; 2; 3];;
- : int list list = [[]; [3]; [2; 3]; [1; 2; 3];]
4. À l’aide des fonctions renverse et suffixes, écrivez la fonction prefixes qui renvoie
une liste des préfixes d’une liste. L’ordre des éléments de cette liste n’a pas d’importance. Par
exemple :
prefixes [1; 2; 3];;
- : int list list = [[]; [1]; [1; 2]; [1; 2; 3]]
Annexe 1 (Fonctions utiles des modules List et String)
1. [Link] : (’a -> bool) -> ’a list -> ’a list
2. List.fold_left : (’a -> ’b -> ’a) -> ’a -> ’b list -> ’a
3. [Link] : ’a list -> ’a list
4. List.rev_map : (’a -> ’b) -> ’a list -> ’b list
5. [Link] : string -> int
6. [Link] : string -> int -> char
[Link] s n renvoie l’exception Invalid_argument lorsque n n’est pas un index
valide dans s