0% ont trouvé ce document utile (0 vote)
193 vues2 pages

Programmation Fonctionnelle L2 2021-2022

Ce document présente trois exercices sur la programmation fonctionnelle. Le premier exercice porte sur le typage d'expressions, le deuxième sur l'interprétation d'expressions et le troisième sur la manipulation de listes à l'aide de fonctions du module List d'OCaml.

Transféré par

Mimo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
193 vues2 pages

Programmation Fonctionnelle L2 2021-2022

Ce document présente trois exercices sur la programmation fonctionnelle. Le premier exercice porte sur le typage d'expressions, le deuxième sur l'interprétation d'expressions et le troisième sur la manipulation de listes à l'aide de fonctions du module List d'OCaml.

Transféré par

Mimo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi