La fonction string_of_bool
, traduire "chaîne à partir d'un booléen"
, est une fonction prédéfinie. Elle prend en paramètre un booléen et retourne sa représentation sous forme d'une chaîne "true"
ou "false"
. Cette fonction a été définie par :
let string_of_bool b = if b then "true" else "false" in
On peut utiliser cette fonction prédéfinie pour afficher facilement un booléen. Par exemple, si b
est un booléen qui vaut vrai, alors l'instruction suivante affiche "true"
.
print_string (string_of_bool b);
Si on a besoin d'afficher plusieurs booléens, on pourra définir print_bool
de la manière suivante :
let print_bool b = print_string (string_of_bool b); in
Pour afficher des booléens, on définit généralement la fonction print_bool
au préalable :
let print_bool b = print_string (string_of_bool b); in
Par exemple, pour tester le code de la fonction est_pair
:
let print_bool b = print_string (string_of_bool b); in let est_pair n = (n mod 2 = 0) in print_bool (est_pair 3); print_string " "; print_bool (est_pair 4);
Ce code affiche "false true"
.
Pour lire un booléen, il n'y a pas de fonction read_bool()
. Là encore parce qu'elle ne sert pas beaucoup. Mais il y a la fonction bool_of_string
, traduire "booléen à partir d'une chaîne"
. Ainsi on peut définir soi-même read_bool
:
let read_bool() = let s = read_line() in bool_of_string s in
L'utilisateur doit taper "true"
ou "false"
fournir le booléen.
En pratique, il est beaucoup plus simple de lire un entier. L'association généralement utilisée est zéro pour false
et n'importe quel autre entier pour true
. Voici la traduction immédiate en code :
let read_bool() = let x = read_int() in if x = 0 then false else true in
Cette fonction peut être condensée en :
let read_bool() = (read_int() <> 0) in
En effet, on renvoie bien vrai dès que l'entier lu est différent de 0.
On peut réutiliser le code de l'exercice précédent pour tester notre nouvelle fonction. Il suffit maintenant à l'utilisateur de taper 0 pour faux, et 1 (ou tout autre entier) pour vrai.
let b1 = read_bool() in let b2 = read_bool() in print_string (string_of_bool (b1 = b2));