Module LI213 – Types et Structures de donn´ees page 5
Q 3.1 (2 point) Soit la d´eclaration : type intersection = EMPTYSET | SUBSET
| SUPSET | INTERSECT ; ; ´
Ecrivez une fonction :
inter : ’a * ’a -> ’a * ’a -> intersection telle que inter (x,y) (z,t) ren-
voie :
EMPTYSET si [x, y]∩[z, t] = ∅,
SUBSET si [x, y]⊆[z, t],
SUPSET si [x, y]⊃[z, t],
INTERSECT sinon.
Q 3.2 (2 points) ´
Ecrivez une fonction find list container : int * int ->
noeud list -> arbre prenant en argument un intervalle [x, y] ainsi qu’une liste de
nœuds/intervalles disjoints. S’il existe un nœud contenant l’intervalle [x, y] dans la liste, la
fonction renvoie un arbre dont la racine est ce nœud. Sinon s’il existe un nœud repr´esentant
un intervalle [z, t] d’intersection non vide avec [x, y] et tel qu’aucun des deux intervalles
[x, y] et [z, t] n’est inclus dans l’autre, alors la fonction l`eve une exception Intervalle error.
Dans tous les autres cas, elle renvoie Nil. Ainsi :
find list container (45,46) [noeud b ; noeud c ; noeud d] renverra Elt noeud c,
find list container (30,46) [noeud b ; noeud c ; noeud d] l`evera l’exception :
Intervalle error et l’application :
find list container (55, 58) [noeud b ; noeud c ; noeud d] renverra Nil.
Q 3.3 (4 points) Dans cette question, on recherche le nœud de l’arbre en dessous duquel