Université du Littoral Côte d’Opale M1 Informatique
Programmation Fonctionnelle
Examen 2015-2016, Session 1, Durée 2h
Document autorisé : une feuille de notes manuscrites, comportant votre nom, pas de photocopie
1 Questions de cours (6 points)
1.1 Qu’est-ce-que la programmation fonctionnelle ?
1.2 Citez quatre caractéristiques/fonctionnalités que l’on rencontre généralement dans les langages
fonctionnels.
1.3 Quelles sont les deux grandes catégories historiques de langages fonctionnels ? Citez deux langages
de chaque catégorie.
1.4 Qu’est-ce-que l’évaluation paresseuse ? Citez deux utilisations intéressantes.
1.5 Qu’est-ce-qu’un eet de bord ? Pourquoi dit-on que Haskell est un langage «purement fonction-
nel» et en quoi est-ce intéressant ?
1.6 Qu’est-ce-qu’un type algébrique ? Indiquez notamment comment sont créées et comment sont ma-
nipulées les données avec un type algébrique.
2 Moitiés des entiers pairs (3 points)
2.1 Écrivez une fonction récursive moitiesDesPaires1 qui prend une liste d’entiers et retourne la
liste des moitiés des éléments pairs. Par exemple, avec la liste [13,37,42,12] on aura pour résultat
[21,6].
2.2 Écrivez une fonction moitiesDesPaires2 équivalente mais utilisant une liste en compréhension.
2.3 Écrivez une fonction moitiesDesPaires3 équivalente mais utilisant des traitements de liste (et en
notation «point free»).
3 Fonctions d’ordres supérieurs (4 points)
Soit la fonction suivante :
maxCoupleEntiers (x,y) =max x y
3.1 Quel est l’ordre de cette fonction ? Écrivez sa signature.
3.2 Écrivez une fonction max2entiers (avec sa signature) équivalente mais sous forme curryée. Quel
est son ordre ?
3.3 Écrivez une fonction seuiller0Min qui seuille un entier à 0 au minimum, en utilisant la fonction
max2entiers (par exemple, avec l’entrée 42 on obtiendra 42 et avec l’entrée -42 on obtiendra 0).
Comment appelle-t-on la relation entre seuiller0Min et max2entiers ?
3.4 Écrivez une fonction sommePositifs qui calcule la somme des entiers positifs d’une liste en utilisant
une réduction, une lambda et la fonction seuiller0Min.
4 Récursivité (3 points)
Pour rappel, on peut calculer la somme des éléments d’un ensemble de façon récursive :
S() = 0
S({x1, x2. . .}) = x1+S({x2. . .})
M1-PF-EX1 2015-2016 page 1 / 2
1. Écrivez une fonction récursive sommeRec qui calcule la somme d’une liste d’entiers en utilisant la
dénition précédente.
2. Pourquoi dit-on que cette fonction est récursive non-terminale ? Qu’est-ce-que cela implique ?
3. Écrivez une fonction sommeRecTerm qui calcule également la somme d’une liste d’entiers mais en
utilisant une fonction auxiliaire et la récursivité terminale.
5 Type algébrique d’arbre binaire (5 points)
On veut dénir un type de données permettant de manipuler des arbres binaires dont chaque noeud
contient un entier. Par exemple :
1
23
4
1. Écrivez un type algébrique Arbre correspondant. Indication : dénissez des constructeurs à 0, 1 et
2 paramètres.
2. Écrivez une classe Sommable permettant de représenter un type qui peut être sommé en un entier
(via une fonction somme).
3. Instanciez la classe Sommable pour votre type Arbre. Par exemple sur l’arbre précédent, somme doit
retourner 10.
4. Écrivez une fonction showSomme qui prend une données de classe Sommable et retourne un texte
indiquant la somme. Par exemple sur l’arbre précédent, showSomme doit retourner "la somme vaut
10".
5. Écrivez un main qui ache la somme de l’arbre précédent en utilisant la fonction showSomme.
M1-PF-EX1 2015-2016 page 2 / 2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !