Il est assez ennuyeux et rébarbatif d'écrire une interface en ligne de commande qui pose plein de questions à l'utilisateur. Le code de chaque question est quasiment toujours le même et ça prend vite de la place. Voyons comment écrire une fonction générique qui pose des questions qu'on lui passe en paramètre en Objective Caml.
Qu'a-t-on besoin dans nos questions ? Quatre éléments (à adapter selon les besoins) :
- La question à poser à l'utilisateur
- Une fonction pour traiter sa réponse
- Une fonction pour vérifier si la réponse est correcte
- Une phrase pour lui signifier que sa réponse est incorrecte
Dans notre cas, une question est donc un quadruplet (qstn,err,rtype,cdtn) où qstn est la question posée, err le message d'erreur, actn l'action à réaliser et qdtn la condition à remplir.
Voici un exemple de question :
let question = (
"Donnez un entier strictement positif : ",
"Il faut qu'il soit strictement positif",
int_of_string,
(>=) 0
);;
et une fonction pour traiter la question :
let rec demande (qstn,err,actn,cdtn) =
print_string qstn;
let r = actn (read_line ()) in
if (cdtn r)
then begin
print_endline err;
demande (qstn,err,actn,cdtn)
end
else r;;
Il suffit ensuite d'insérer demande question dans le code et de
créer un quadruplet pour chaque question.


