(* La mission de do_parse l est * Si l est de la forme la @ rem où la représente un arbre a, alors renvoie la paire a,rem. * Sinon, fais ce que dois, advienne que pourra (cf. assert false, devise de Du Guesclin) *) let rec do_parse l = match l with | Zero::Zero::rem -> Feuille Blanc, rem | Zero::Un::rem -> Feuille Noir, rem | Un::rem -> let a1,rem = do_parse rem in let a2,rem = do_parse rem in let a3,rem = do_parse rem in let a4,rem = do_parse rem in Noeud (a1,a2,a3,a4),rem | _ -> assert false ;; let liste_vers_arbre l = let a,_ = do_parse l in a ;; |
assert false
qui déclenchera une erreur à l'exécution.
On aurait pu aussi omettre ce dernier cas, mais alors le filtrage
n'est pas exhaustif comme le signalerait le compilateur.
File "sol.ml", line 191, characters 21-283: Warning: this pattern-matching is not exhaustive. Here is an example of a value that is not matched: []Laisser ainsi consciemment des avertissements n'est pas une bonne pratique de programmation. Car alors on ignorera les avertissements du compilateur et on négligera de vraies erreurs. D'où l'usage de assert false.
liste_vers_arbre
ne prend pas la peine de vérifier que toute la
liste l est consommée. C'est bien pratique pour la question suivante.