(* ===================================================== *)
(*      Apprentissage de la programmation avec OCaml     *)
(*      Catherine Dubois & Valérie Ménissier-Morain      *)
(*                Éditions Hermès Sciences               *)
(*                        Mars 2004                      *)
(* ===================================================== *)
(* Fichier MLSRC/date_du_lendemain.ml                    *)
(* ===================================================== *)

let bissextile a =
  (a mod 4 = 0) && ((a mod 100 <> 0) || (a mod 400 = 0));;

let nb_jours m a =
  if m=4 || m=6 || m=9 || m=11 then 30
  else if m=2 then (if bissextile a then 29 else 28)
  else 31;;

let est_postérieure (j1, m1, a1) (j2, m2, a2) =
  a1>a2 || (a1=a2 && (m1>m2 || (m1=m2 && j1>j2)));;

let date_valide (j, m, a)=
  let début_grégorien=(15, 10, 1582) in
  (m>=1 && m<=12) && (j>=1 && j<=(nb_jours m a))
  && est_postérieure (j, m, a) début_grégorien;;

let lendemain (jour, mois, an) =
  if date_valide (jour, mois, an) then
    if
 jour = nb_jours mois an
    then if mois = 12 then (1, 1, an+1)
    else (1, mois+1, an)
    else (jour+1, mois, an)
  else failwith "lendemain : date non valide";;

Ce document a été traduit de LATEX par HEVEA.