L3 - Programmation fonctionnelle - TP2 1 Objectifs
Les exercices proposés dans ce TP ont pour objet d'entrainer la compétence M.6 (Variantes) de la grille de compétences de programmation fonctionnelle.
Votre but ne doit pas être de faire tous les exercices proposés pendant la séance de TP, mais plutôt de prendre le temps de comprendre et d'apprendre à appliquer les principes de base de la représentation et de la gestion des arbres en caml.
Face au comportement inattendu d'un programme, ne restez pas dans le doute : faites des expériences, tentez de comprendre ce qui se passe, sollicitez l'enseignant.
Les fonctions demandées doivent être programmées en style fonctionnel pur (sans boucle) et sans utiliser d'éventuelles fonctions prédénies du langage. Chaque fonction doit être validée par des essais réalisés avec des données de test pertinentes.
2 Arbres binaires
Compétence M.6 : Variantes
2.1 Type arbre binaire
Dénissez le type bintree, représentant un arbre binaire, sachant qu'un tel arbre est soit une feuille notéeL, soit un noeud, notéN et ayant trois attributs qui sont un entier (appelé étiquette du noeud), et deux arbres binaires (appelés ls droit et ls gauche).
2.2 Recherche de chemin
On déni le poids d'un chemin d'un arbre comme la somme des valeurs des étiquettes des noeuds de ce chemin.
Implantez une fonction qui accepte en paramètre un arbre binairet et un entier x, et qui retourne une valeur Booléenne égale à true si et seulement si il existe dans tun chemin dont le poids est supérieur à x.
2.3 Parcours d'arbre
Implantez une fonction qui accepte en paramètre un arbre binaire et retourne la liste des étiquettes des noeuds de cet arbre parcouru en ordre inxe.
Le parcours d'un arbre binaire en ordre inxe consiste, pour chaque noeudN, à parcourir d'abord le ls droit en ordre inxe, puis à lire l'étiquette deN, puis à parcourir le ls gauche en ordre inxe.
2.4 Comparaison d'arbres
Implantez une fonction qui accepte en paramètre deux arbres binairest etu, et qui retourne un Booléen valant true si et seulement si les deux arbres sont identiques (i.e., même structure et mêmes étiquettes).
2.5 Construction d'arbres
On associe à chaque feuille d'un arbre binaire un entier, appelé rang. La feuille située la plus à gauche a pour rang 1, et les autres sont numérotées de telle sorte qu'en parcourant l'arbre en ordre inxe, on visite ses feilles dans l'ordre croissant de leurs rangs.
Implantez une fonction qui accèpte en paramètres deux arbres binairestetuet un entieri, et qui retourne l'arbre obtenu en remplaçant danstla feuille de rangipar l'arbreu. S'il n'existe pas de feuille de rangi danst, la fonction doit retournert.
1
3 Arbres généraux
Compétence M.6 : Variantes
Reprendre les exercices sur les arbres binaires en les adaptant aux arbres généraux. Dans un arbre général, chaque noeud possède un nombre quelconque de ls. Une feuille est simplement un noeud n'ayant aucun ls. On utilisera une liste pour représenter les ls d'un noeud.
2