Précédent Index Suivant



Traits impératifs


Les références Caml-Light correspondent aux variables des langages impératifs. Ce sont des ``boites'' dans lesquelles on peut ``mettre'' des valeurs de type fixé.

Caml-Light C
let r = ref 1 int r = 1
On distingue la référence de son contenu
r := !r + 1 r = r + 1

On a alors un modèle dynamique de mémoire analogue aux environnements mais dont les ``clés'' sont des références.

L'affectation
(prefix :=):aref ->a -> unit
modifie la valeur associée à la clé, la création
ref :a->aref

Soit M l'état mémoire d'un programme et E l'environnement courant ,

let r = ref v introduit on dit parfois que vr est un pointeur sur v ou l'adresse de v. Si r -E-> vr

Il n'y a pas de masquage dans la mémoire :

é(M|>vr)¬v'ù
=
é(é(vr¬v)<|M'ù|>vr)¬v'ù
=
é(vr¬v')<|M'ù

L'état d'un programme est alors donné par le couple (E, M).

Les vecteurs (vect), enregistrements (record) dont les champs sont déclarés mutables (mutable) suivent le même modèle.

let foo = 
  let c = ref 0 in
    function () -> 
      begin c := !c + 1 ; !c end ;;
incrémente un compteur local à la fonction à chaque appel.

let foo = function () ->
  let c = ref 0 in 
  begin c := !c + 1 ; !c end ;;
Crée un nouveau compteur à chaque appel.

Que fait ? function c -> begin c := !c + 1 ; c end


Précédent Index Suivant