Entraînement
Après ces deux petites pages, voici un quiz pour vous tester. Comme avant, les réponses deviennent vertes aussitôt qu’elles sont justes.
Sachant qu’on définit les types suivants :
type itineraire =
| Arrive
| Prendre of string * itineraire
type recette =
| Degustation
| Cuisson of int * recette (* le int correspond au temps de cuisson *)
| Instruction of string * recette
| PrendreIngredient of string * recette
Complétez ces fonctions récursives :
(* Donne une version lisible par un humain d’un itinéraire.
*
* Exemple :
*
* afficher(Prendre("rue des Mathématiques", Prendre("rue de la Physique", Arrive)))
* = "prendre la rue des Mathématiques, puis prendre la rue de la Physique, puis vous êtes arrivés."
*)
let rec afficher (i : itineraire) : string =
match i with
| Arrive -> "vous êtes arrivés."
| ______(nom_route, suite) -> "prendre la " ^ nom_route ^ ", puis " ^ ______
(* Compte le nombre d’étapes d’une recette *)
let rec compter_etapes (r : recette) : int =
match r with
| PrendreIngredient(_, s) | Instruction(_, s) | Cuisson(_, s) -> ______
| Degustation -> 0 (* La dégustation ne compte pas vraiment comme une étape *)
(* Fait la somme des temps de cuisson, au cas où il y en auraient plusieurs *)
let rec cuisson_total (r : recette) : int =
match r with
| ______ -> 0
| Cuisson(temps, s) -> ______
| Instruction(_, s) | PrendreIngredient(_, s) -> cuisson_total s
On veut écrire un type récursif pour modéliser une grotte, et ensuite écrire un algorithme pour trouver une sortie. On a donc trois types de « chemins » :
- un cul-de-sac ;
- une sortie ;
- un embranchement, avec un chemin à gauche et un à droite.
type grotte =
| ______
| ______
| ______ of ______
(* Sachant qu’on a ensuite cette fonction : *)
let fin_de_la_grotte (gro : grotte) : bool =
match gro with
| CulDeSac | Sortie -> true
| Embranchement(_, _) -> false