(* Plus longue séquence de valeurs true dans une liste de booléens,
   en utilisant un itérateur *)

let max_seq l =
  let m, n =
    List.fold_left (fun (m, n) b -> if b then m, n + 1 else max m n, 0) (0, 0) l
  in
  max m n

(* L'accumulateur est ici une paire (m, n) où m est la longueur de la
   plus grande séquence de true vue jusqu'à présent et n le nombre de
   true vus à la fin de la séquence déjà examinée.

   Pour éviter de mettre à jour m à chaque étape (avec max m (n + 1)),
   on ne le fait que lorsqu'on rencontre la valeur false, et donc une
   fois au final.
*)

This document was generated using caml2html