-
-
Save Tchou/6e16fa92a9d91cc91674ed6cd316179c to your computer and use it in GitHub Desktop.
Activité 1 : un type somme pour les formes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (* Le type des formes *) | |
| type shape = | |
| Triangle of float * float | |
| | Square of float | |
| | Rect of float * float | |
| | Disk of float | |
| | Ellipse of float * float | |
| (* La fonction de calcul d'aire : | |
| si on retire une des branches (par exemple "Rect (w, h) -> w *. h") | |
| alors OCaml donne un warning indiquant qu'un cas n'est pas couvert | |
| *) | |
| let area s = | |
| match s with | |
| Triangle (base, height) -> base *. height *. 0.5 | |
| | Square side -> side *. side | |
| | Rect (w, h) -> w *. h | |
| | Disk r -> r *. r *. Float.pi | |
| | Ellipse (r1, r2) -> r1 *. r2 *. Float.pi | |
| (* Une fonction de normalisation. Attention, | |
| il est dangereux de remplacer la la dernire ligne par: | |
| | _ -> s | |
| même si c'est correct. | |
| En effet, si on ajoute un nouveau cas dans le type, avec | |
| la fonction actuelle, le dernier cas ne sera pas traité et on | |
| aura un warning qui nous forcer à mettre à jour la fonction pour | |
| traiter explicitement ce dernier cas. | |
| Si on met | _ -> s, alors tout nouveau cas sera absorbé par la | |
| branche "joker" silencieusement | |
| *) | |
| let normalize s = | |
| match s with | |
| | Rect (r1, r2) -> if r1 = r2 then Square r1 else s | |
| | Ellipse (r1, r2) -> if r1 = r2 then Disk r1 else s | |
| | Triangle (_) | Square (_) | Disk (_) -> s | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment