Exercices de révision
Exercice 0 : Récursion, listes
Pour les exercices suivants, essayez de proposer au moins deux variantes de votre réponse en utilisant : récursion naïve, récursion terminale, plis (left/right), map.
-
Problème 0 : Écrivez une fonction
sum nqui calcule la somme de tous les entiers de0àn. -
Problème 1 : Écrivez une fonction
sum lqui calcule la somme des éléments d'une liste (supposés être des entiers). -
Problème 2 : Écrivez une fonction
climb nqui compte le nombre de façons de monter un escalier denmarches, où les déplacements permis sont : monter d'une marche ou monter de deux marches à la fois. -
Problème 3 : Écrivez une fonction
paths nqui compte le nombre de chemins allant de l'origine(0,0)au coin supérieur droit(n,n)du quadrant positif de la grille carrée (i.e. formée de points à coordonnées entières). Les pas autorisés sont soit vers la droite, soit vers le haut. -
Problème 4 : Écrivez une fonction
chaines nqui renvoie la liste de toutes les chaînes binaires de longueurn. -
Problème 5 : Écrivez une fonction
sort lqui trie une liste d'entiers par ordre croissant. Utilisez l'algorithme de votre choix. -
Problème 6 : Écrivez une fonction
zip l kqui prend deux listesletket renvoie une liste de taille le minimum delength l, length ket dont lei-ème élément est(a,b), un couple formé desi-èmes éléments deletkrespectivement. -
Problème 6 : Écrivez une fonction
cartesian l kqui prend deux listes et génère la liste de tous les couples(a,b)oùaest un élément deletbest un élément dek.
Exercice 1 : Arbres
-
Problème 0 : Définissez un type algébrique représentant des arbres binaires, dont les sommets (internes ou feuilles) portent des étiquettes de type
'a. -
Problème 1 : Écrivez une fonction
average_path_length tqui prend en entréetet calcule la longueur moyenne d'un chemin allant de la racine de l'arbre à l'une de ses feuilles. -
Problème 2 : Un arbre binaire de recherche est un arbre binaire étiqueté par des entiers, tel que tous ses sous-arbres vérifient la propriété suivante : l'étiquette de la racine est supérieure ou égale à toutes celles du sous-arbre gauche et strictement inférieure à toutes celles du sous-arbre droit. Écrivez les fonctions suivantes :
search t e: cherche un élémentedans l'arbret.insert t e: insère un élémentedans l'arbret, produisant un nouvel arbre binaire de recherche.merge t1 t2: fusionne deux arbres binaires de recherche pour en produire un nouveau.delete t e: supprime un élémented'un arbre binaire de recherchet; l'arbre résultant doit encore être un arbre binaire de recherche.
-
Problème 3 : Définissez un type algébrique représentant des arbres généraux dont chaque sommet possède un nombre arbitraire d'enfants, avec des étiquettes de type
'asur toutes les bornes (internes ou feuilles). -
Problème 4 : Définissez une fonction
max tqui calcule le maximum des étiquettes d'un arbre généraltétiqueté par des entiers. -
Problème 5 : Définissez une fonction
depth tqui calcule la profondeur d'un arbre généralt. -
Problème 6 : Soit
steple type suivant :type step = | Left of int | Right of int | StayDéfinissez une fonction
path t pqui prend un cheminp : step listet le suit dans l'arbre, en renvoyant la valeur du sommet sur lequel il aboutit (le cas échéant). Vous devez utiliser un mécanisme adéquat de gestion d'erreurs : lever des exceptions ou utiliser le moduleOption.