Entraînement
Voici un petit quiz pour voir si vous avez compris le chapitre sur les types. Comme pour ceux d’avant, vos réponses deviendront vertes dès qu’elles sont justes.
On définit ces types :
(* On modélise un emploi du temps *)
type ue =
| Inf201
| Inf203
| Mat201
| Mat203
| Phy201
| Phy202
| Pause
type horaire = int * int (* heure et minute *)
type cours = horaire * horaire * ue (* heure de début et de fin, UE *)
Quel est le type des expressions suivantes (seule la version la plus « simple » sera acceptée) ?
Mat201
((13, 30), (15, 00), Inf201)
(13, 30, 00)
'Z'
(15, 32)
Que faut-il écrire à la place des ______
pour que ce code soit correct ?
type tram = A | B | C | D | E
type transport =
| Bus of int (* numero de ligne *)
| Tram of ______
| ______
| ______
let nom_tram (t : tram) : string =
match t with
| A -> "A"
| B -> "B"
| C -> "C"
| D -> "D"
| E -> "E"
let nom_transport (tra : transport) : string =
match tra with
| Bus(ligne) -> "Ligne " ^ (string_of_int ligne) ^ " de bus"
| Tram(t) -> "Tram " ^ (nom_tram t)
| Voiture -> "Voiture"
| Velo -> "Velo"
Puis :
Et enfin :
On va modéliser une collection de musique. Pour ça on va créer les types suivants : `musique`, `genre`, `album`, `type_album` (Single, EP, ou album). Je vous laisse libre de faire ce que vous voulez, mais essayez de faire des types les plus complets possibles. Vous pouvez aussi ajouter des types en plus (`artiste` par exemple) si vous avez envie.
Proposition de correction
type genre =
| Classique
| Electro
| KPop
| Pop
| Rap
| RnB
| Rock
type artiste = string (* Le nom de l'artiste *)
type type_album = Single | EP | Album
type album = artiste * type_album * string (* le string est le nom de l'album *)
type musique = string * genre * album * artiste
(* On peut aussi définir album et musique avec des types structurés si on veut : *)
type album = {
alb : album;
alb_type : type_album;
nom : string;
}
type musique = {
titre : string;
genre : genre;
alb : album;
art : artiste;
}
Je vous propose de continuer en écrivant des fonctions pour manipuler ces types.
meme_album
qui dit si deux musiques sont dans le même album ;meme_genre
qui dit si deux musiques appartiennent au même genre ;long_titre
qui dit si le titre est long (quelque chose comme plus de 20 caractères). On peut utiliser la fonctionString.length : string -> int
.
Proposition de correction
let meme_album (a : musique) (b : musique) : bool =
let (_, _, alb_a, _) = a in
let (_, _, alb_b, _) = b in
alb_a = alb_b
let meme_genre (a : musique) (b : musique) : bool =
let (_, genre_a, _, _) = a in
let (_, genre_b, _, _) = b in
genre_a = genre_b
let long_titre (m : musique) : bool =
let (titre, _, _, _) = m in
(String.length titre) > 20
(* Si vous avez utilisé des types structurés vous pouvez faire : *)
let meme_album (a : musique) (b : musique) : bool =
a.alb = b.alb
let meme_genre (a : musique) (b : musique) : bool =
a.genre = b.genre
let long_titre (m : musique) : bool =
(String.length m.titre) > 20