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