Module LI213 – Types et Structures de donn´ees ann´ee 2004–2005
Examen de septembre du module LI213
Dur´ee : 2 heures
Seuls documents autoris´es :
le manuel de r´ef´erence d’OCaml et vos notes manuscrites de cours et de TD
Note importante : Si vous ne savez pas r´epondre `a une question, supposez d´efinie la fonction
demand´ee pour les questions suivantes.
Exercice 1 (6 points)
Q 1.1 (1 point) ´
Ecrivez une fonction mem : ’a -> ’a list -> bool telle que mem e liste renvoie
un bool´een indiquant si eappartient `a la liste.
Q 1.2 (1 point) ´
Ecrivez une fonction unique : ’a list -> ’a list telle que unique l supprime
les occurrences multiples de la liste let retourne la liste r´esultante. L’ordre des ´el´ements dans la liste
retourn´ee n’a aucune importance. Par exemple, unique [3 ; 4 ; 5 ; 4 ; 2 ; 3 ; 1] pourra retourner
[5 ; 4 ; 2 ; 3 ; 1].
Q 1.3 (1 point) ´
Ecrivez une fonction intersect : ’a list -> ’a list -> ’a list telle que
intersect l1 l2 renvoie la liste constitu´ee uniquement des ´el´ements appartenant `a la fois `a l1 et
l2. Ces ´el´ements ne doivent apparaˆıtre qu’une fois dans la liste retourn´ee. Par exemple, intersect
[1 ;3 ;2 ;3 ;4] [2 ;3 ;5 ;2] renverra la liste [2 ;3] ou [3 ;2]. L’ordre des ´el´ements dans la liste
retourn´ee n’a aucune importance.
Q 1.4 (1 point) ´
Ecrivez une fonction union : ’a list -> ’a list -> ’a list qui renvoie l’union
de deux listes, c’est-`a-dire les ´el´ements apparaissant dans au moins une des deux listes. Ceux-ci ne
doivent apparaˆıtre qu’une fois dans la liste retourn´ee et leur ordre dans cette liste n’a aucune impor-
tance.
Q 1.5 (2 point) ´
Ecrivez une fonction elts : ’a list list -> ’a list qui prend en argument
une liste de listes et qui renvoie la liste des ´el´ements qui composent ces listes. Ceux-ci ne doivent
apparaˆıtre qu’une fois dans la liste retourn´ee et leur ordre dans cette liste n’a aucune importance.
Par exemple, elts [[1 ;3 ;3 ;2] ; [2 ;4 ;5] ; [5]] pourra renvoyer [1 ; 3 ; 2 ; 4 ; 5].
Exercice 2 (6 points)
On repr´esente des polynˆomes par la liste de leurs coefficients (ordonn´es selon les puissances croissantes
dans le polynˆome). Attention : tout au long de l’exercice, les listes sont telles que leur dernier entier (le
coefficient de la plus grande puissance) est diff´erent de 0. Ainsi, la liste [3 ;0 ;5 ;0 ;4 ;6] repr´esente-
t-elle le polynˆome 3 + 5x2+ 4x4+ 6x5et la liste [] le polynˆome 0.
Q 2.1 (3 points) ´
Ecrivez une fonction add : int list -> int list -> int list telle que add
p1 p2 renvoie la liste correspondant au polynˆome p1 + p2. Rappelez-vous que les derniers ´el´ements
de la liste correspondant `a p1 + p2 doivent ˆetre diff´erents de 0. Ainsi add [1 ; 0 ; 3] [-1 ; 2 ; -3]
renverra la liste [0 ; 2].
Q 2.2 (1 point) ´
Ecrivez une fonction scalar : int -> int list -> int list telle que scalar n
prenvoie le produit du polynˆome ppar le scalaire n, autrement dit les coeffcients de psont multipli´es
par n. N’oubliez pas que les derniers entiers de la liste retourn´ee doivent ˆetre diff´erents de 0.