Précédent Index Suivant



Les différents types de bibliothèques



Fonctions

Fonctions récursives

Listes (début du filtrage)

Fonctions simples manipulant des listes

Filtrage

On appelle filtrage ou analyse de cas une expression qui décrit un calcul selon la forme que prend une autre expression.

On appelle filtre ou motif la description de la forme attendue. Dans les exemples précédents, il s'agit par exemple de [], x::l, _, x::_, x1::x2::_. Le filtre permet non seulement de préciser la forme attendue mais aussi d'extraire et de nommer certaines parties d'une valeur.

Un filtrage apparaît comme une suite de cas tous composés d'un filtre et d'une expression. Chaque cas est syntaxiquement noté

| filtre -> expression. Le premier « | » peut être omis. Donc un filtrage prend la forme syntaxique générale suivante
match exp with
| filtre1 -> exp1
...
| filtren -> expn
exp, exp1, ..., expn sont des expressions et filtre1, ..., filtren sont des filtres.

exp1, ..., expn doivent toutes avoir le même type et filtre1, ..., filtren doivent tous être des filtres du type de exp. Il faut que tous les filtres recouvrent tous les cas possibles.
#let tête_imparfaite = function l ->
 match l with
 | x::_ -> x;;
Entrée interactive:
>match l with
>| x::_ -> x..
Attention: ce filtrage n'est pas 
exhaustif.
tête_imparfaite : 'a list -> 'a = <fun>
#tête_imparfaite [1;2;3];;
- : int = 1
#tête_imparfaite [];;
Exception non rattrapée: Match_failure 
("", 3349, 3373)
Récapitulatif des filtres de listes

Dans la composition d'un filtre de listes, il peut entrer :
  1. Les constantes (par exemple 0)
  2. Les identificateurs (par exemple x ou l dans les fonctions sur les listes)
  3. Le signe _ comme cas par défaut ou pour éviter de nommer un identificateur qui n'apparaît pas dans le corps de ce cas
  4. La liste vide []
  5. Et enfin un filtre défini par le constructeur :: avec un élément que l'on peut lui-même filtrer et une liste que l'on peut filtrer elle aussi (filtre::filtre).
Attention, si l'identificateur x est défini, le filtre x::_ ne filtre pas les listes commençant par x, mais toutes les listes en nommant x son premier élément indépendamment de l'identificateur x préexistant et dans l'expression associée au filtre x correspond au premier élément de la liste filtrée. Si on veut filtrer les listes commençant par x, alors il faut écrire y::_ when y=x. Le when condition s'appelle la garde du filtre.

Fonctions récursives manipulant des listes

Fonctions récursives produisant des listes


Types produits

Types enregistrements

Types sommes

Types récursifs

Un peu d'ordre supérieur

Précédent Index Suivant