29/03/17
3ème partie : ordre supérieur
1
inf121 : algorithmique et programmation fonctionnelle
III) opérations d'ordre sup sur les séquences
Typologie des fonctions sur une séquence [e1 ; ... ; en] :
1) fonctions dont le résultat est scalaire :
a) prédicats (scalaire= booléen) :
- existence d'un ei satisfaisant une propriété ( )
- tous les ei satisfont une propriété ( )
b) opérations (scalaire= autre) :
- somme des f(ei) (∑)
- produit des f(ei) (∏)
2) fonctions dont le résultat est une séquence :
a) application d'une fonction sur chaque ei
b) sélection des ei vérifiant une propriété
29/03/17
3ème partie : ordre supérieur
2
inf121 : algorithmique et programmation fonctionnelle
III) opérations d'ordre sup sur les séq prédicats
1) Fonctions dont le résultat est scalaire
a) Prédicats
SPÉC
existence d'un élément satisfaisant une propriété
Profil existe : (α IB) séq(α) IB
Sémant. (existe p s) = vrai ssi ei s / p(ei) = vrai
Ex. (existe (e e mod 3 = 0) [-2 ; 1 ; 6]) = vrai
(existe (e 'a' < e < 'z') ['C';'A';'M';'L']) = faux
29/03/17
3ème partie : ordre supérieur
3
inf121 : algorithmique et programmation fonctionnelle
III) opérations d'ordre sup sur les séq prédicats
RÉAL
existence d'un élément satisfaisant une propriété
Algo 1 application modèle d'analyse Mséq(Elt) sur (existe p)
(voir partie 2)
…/... tableau
Algo 2 spécialisation de fold, étudiée dans la suite
NB existe défini dans la librairie standard : List.exists
existe : (α IB) séq(α) IB
29/03/17
3ème partie : ordre supérieur
4
inf121 : algorithmique et programmation fonctionnelle
III) opérations d'ordre sup sur les séq prédicats
List.exists : ('a bool) 'a list bool
Une spécialisation de List.exists : prédicat d'appartenance app_seq :
Exemple : ( app_seq 2 [-3;2;5] ) = vrai
let app_séq (x:'a) : 'a list -> bool =
(* application partielle de existe : *)
(List.exists (function e -> e = x))
NB app_seq définie dans la librairie standard : List.mem
29/03/17
3ème partie : ordre supérieur
5
inf121 : algorithmique et programmation fonctionnelle
III) opérations d'ordre sup sur les séq prédicats
SPÉC
tous les éléments satisfont une propriété
Profil pour_tous : (α IB) séq(α) IB
Sémant. (pour_tous p s) = vrai ssi ei s, p(ei) = vrai
Ex. (pour_tous (e e mod 3 = 0) [-3 ; 0 ; 5]) = faux
(pour_tous (e 'a' < e e < 'z')
['k';'l';'f';'e';'z';'f']) = vrai
1 / 46 100%