Programmation Fonctionnelle 1 Typage (4 points) 2 Traitements de

publicité
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éfinies (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éfinies. Pour rappel :
∑
ui vi
⃗u · ⃗v =
i
3
Récursivité (6 points)
1. Écrivez une fonction récursive takeWhile' qui retourne les premiers éléments d’une liste vérifiant
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 filtrent
les éléments inférieurs (resp. strictement supérieurs) à un entier.
M1-PF-EX1
2015-2016
page 1 / 2
4
Type algébrique (6 points)
On veut définir un type de données permettant de représenter des expressions arithmétiques (nombres
et additions uniquement).
1. Écrivez un type algébrique Expr correspondant.
2. Écrivez la valeur de type Expr correspondant à la représentation suivante.
+
+
1
+
2
3
4
3. Écrivez une fonction evaluer qui permet d’évaluer une expression.
4. Instanciez la classe Show pour votre type Expr. Votre implémentation doit afficher l’expression
complètement parenthésée, par exemple ((1 + 2) + 3).
5. Écrivez une fonction concatener qui permet d’ajouter deux expressions. Par exemple, la concaténation de 1 + 2 et 3 + 4 donne 1 + 2 + 3 + 4.
6. Écrivez un main qui crée des expressions 1 + 2 et 3 + 4 puis affiche leur concaténation et l’évaluation
de celle-ci.
M1-PF-EX1
2015-2016
page 2 / 2
Téléchargement