Université du Littoral Côte d’Opale M1 Informatique
Programmation Fonctionnelle
Examen 2015-2016, Session 2, Durée 2h
Document autorisé : une feuille de notes manuscrites, comportant votre nom, pas de photocopie
1 Typage (4 points)
Donnez le type des expressions suivantes. Faites attention à donner le type le plus générique possible.
1.1 12 < 37
1.2 ”12”
1.3 12
1.4 f x = x+1
1.5 f x y = [x, y]
1.6 f x y = y : x
1.7 f x y = (x, y)
1.8 f x y = map y x
2 Traitements de listes (4 points)
2.1 Écrivez une fonction supprimer1 qui «supprime» d’une liste tous les éléments d’une valeur donnée,
en utilisant la récursivité.
2.2 Écrivez une fonction supprimer2 équivalente mais qui utilise une liste en compréhension.
2.3 Écrivez une fonction supprimer3 équivalente mais qui utilise des fonctions prédénies (map,foldl...).
2.4 Écrivez une fonction récursive renverser1 qui renverse une liste (retourne une liste avec les élé-
ments dans l’ordre inverse).
2.5 Écrivez une fonction renverser2 équivalente mais qui utilise un foldr.
2.6 Écrivez une fonction renverser3 équivalente mais qui utilise un foldl.
2.7 Écrivez une fonction calculerPS qui calcule le «produit scalaire de deux listes» en utilisant des
fonctions prédénies. Pour rappel :
⃗u ·⃗v =∑
i
uivi
3 Récursivité (6 points)
1. Écrivez une fonction récursive takeWhile' qui retourne les premiers éléments d’une liste vériant
un prédicat.
2. Écrivez une fonction récursive qui calcule la factorielle (rappel : n! = n×(n−1) ×... ×1) . Puis
écrivez une version récursive terminale.
3. Écrivez une fonction récursive triRapide qui calcule une liste d’entiers selon l’algorithme de tri
rapide. Indication : écrivez deux fonctions auxiliaires récursives lesser (resp. greater) qui ltrent
les éléments inférieurs (resp. strictement supérieurs) à un entier.
M1-PF-EX1 2015-2016 page 1 / 2