(* Multiplication des éléments d'une liste d'entiers,
   en s'arrêtant dès qu'on trouve un 0. *)

(* Voir d'abord l'exercice 2.16 *)

(* Version qui travaille en espace de pile constant, avec un
   accumulateur, pour éviter tout débordement de pile sur une liste
   très grande. *)

let rec mult_aux acc = function
  | []     -> acc
  | 0 :: _ -> 0
  | x :: l -> mult_aux (x * acc) l

let mult =
  mult_aux 1

(* Note : on s'arrête effectivement losrque l'on trouve un zéro, mais on a
   tout de même effectué toutes les multiplications des éléments précédents,
   inutilement.

   Voir l'exercice 2.17 pour remédier à cela. *)

This document was generated using caml2html