Telechargé par benchikhnassim10

td8

publicité
Université de Rouen Normandie
Licence 2 informatique et mathématiques
Bases de la programmation fonctionnelle
{jean-philippe.dubernard, eric.laugerotte}@univ-rouen.fr
UFR sciences et techniques
2021–2022
Travaux dirigés
1/2
[TD 7] Type récursif
Objectifs : .
1 Nombre entier
Exercice 1 (Axiomatique de Peano)
Les axiomes de Peano définissent de la façon suivante les entiers naturels :
• l’élément appelé zéro est un entier naturel ;
• tout entier naturel a un unique successeur ;
• aucun entier naturel n’a zéro pour successeur ;
• deux entiers ayant le même successeur sont égaux ;
• si un ensemble d’entiers naturels contient zéro et contient le successeur de chacun de ses
éléments, alors cet ensemble est égal à N.
1. Définir le type entier_nat correspondant aux axiomes de Peano.
2. Quelle est l’écriture de 3 dans ce modèle ?
3. Quelles sont les fonctions qui renvoient le successeur et le prédecesseur d’un entier naturel.
4. Convertir toute valeur positive de type int (resp. entier_nat) en une valeur de type
entier_nat (resp. int).
5. Écrire les fonctions qui additionnent, soustraient et multiplient deux entiers naturels.
Exercice 2 (Expression arithmétique)
En notation préfixe (ou polonaise), une expression arithmétique sur les entiers relatifs est définie de
la façon suivante :
• soit c’est un entier relatif ;
• soit c’est un opérateur binaire suivi de deux expressions en tant qu’opérande.
1. Écrire un type pour les expressions arithmétiques d’entiers relatifs.
2. Créer une fonction d’évaluation.
Université de Rouen Normandie
Licence 2 informatique et mathématiques
Bases de la programmation fonctionnelle
{jean-philippe.dubernard, eric.laugerotte}@univ-rouen.fr
UFR sciences et techniques
2021–2022
Travaux dirigés
2/2
2 Liste
Exercice 3 (Liste à un seul type)
Une liste contenant des valeurs d’un certain type se définit récursivement de la façon suivante :
• soit elle est vide ;
• soit elle est constituée d’une tête qui est une valeur et d’une queue qui est une liste.
1. Créer le type liste.
2. Donner une liste à quatre éléments.
3. Écrire la fonction insere qui insère une valeur dans une liste.
4. Déterminer l’analogue de la fonction List.fold_left.
5. En déduire la longueur d’une telle liste.
Exercice 4 (Liste à plusieurs types)
On souhaite manipuler des listes contenant des valeurs de trois types différents à la fois sans utiliser
le type list.
1. Définir le type liste_3 qui correspond à cette utilisation.
2. Donner une expression qui crée une valeur de type liste_3 avec deux entiers, un flottant et
un caractère.
3. Écrire les fonctions qui ajoutent un élément selon son type dans une liste de type liste_3.
4. Écrire une fonction longueur qui calcule la longueur d’une liste de type liste_3.
5. Écrire la fonction renv qui renverse les éléments d’une liste de type liste_3.
6. Écrire la fonction concat qui concatène deux listes de type liste_3.
Exercice 5 (File)
Une file stocke des éléments de même type. Les éléments sont retirés d’une file selon leur ordre
d’insertion. C’est le fonctionnement d’une file d’attente. Une file peut s’implanter efficacement à
l’aide de deux listes :
• la première liste contient les premiers éléments entrés dans la file, la tête étant le premier
entré dans la file ;
• la seconde liste contient les derniers éléments entrés dans la file, la tête étant le dernier entré
dans la file.
Lorsque la première liste est vide, on la remplit à l’aide de la seconde.
1. Déterminer un type pour les files.
2. Écrire la fonction enfiler qui ajoute un élément à une file.
3. Écrire la fonction defiler qui extrait un élément à une file.
Téléchargement