title: Caml Light
text: # Caml Light
  
  Caml Light était une implémentation légère du langage de programmation Caml développé par l'INRIA. Elle est aujourd'hui obsolète. Cette version de Caml permettait une programmation fonctionnelle et impérative, mais pas la programmation orientée objet proposée par OCaml, son successeur.
  
  Ce langage a été utilisé en classe préparatoires scientifiques françaises (MPSI puis MP option informatique) pour initier les élèves à l'algorithmique entre 1995 et 2017. Il est désormais remplacé par OCaml.
  
  ## Exemples
  
  ### Fonction factorielle
  
  Pour des entiers naturels, la fonction factorielle est définie par :
  
  $n!=\prod _{i=1}^{n}i=1\times 2\times 3\times \cdots \times (n-1)\times n$
  
  et sa définition récursive est :
  
  $n!={\begin{cases}1\quad {\mbox{si }}n=0\\n\times (n-1)!\quad {\mbox{ sinon}}\end{cases}}$
  
  En Caml Light, cela donne :
  
  ### Algorithme d'Euclide
  
  L'algorithme d'Euclide, pour calculer le pgcd de deux entiers naturels u, v, s'écrit en Caml Light
  
  ### Suite de Fibonacci
  
  La suite de Fibonacci $(F_{n})_{n\geq 1}$ est définie par :
  
  $F_{0}=0,F_{1}=1,\quad F_{n+2}=F_{n+1}+F_{n}\quad {\mbox{ avec }}n\geq 0$
  
  En Caml Light on a la version récursive naïve, qui s'exécute en temps exponentiel :
  
  ou encore, en version récursive terminale prenant en argument les deux premiers termes $a$ et $b$ et s'exécutant en temps linéaire :
  
  On combine couramment les deux, pour disposer à l’extérieur d’une fonction simple, et à l’intérieur de la récursion terminale :
  
  On dispose aussi de deux versions itératives s'exécutant en temps linéaire ($O(n)$), la première en espace linéaire et la seconde en espace constant :
  
  