• Aucun résultat trouvé

Fonctions d’ordre sup´erieur pr´ed´efinies Programmation Fonctionnelle Master 2 I2L apprentissage

N/A
N/A
Protected

Academic year: 2022

Partager "Fonctions d’ordre sup´erieur pr´ed´efinies Programmation Fonctionnelle Master 2 I2L apprentissage"

Copied!
18
0
0

Texte intégral

(1)

Fonctions d’ordre sup´erieur pr´ed´efinies

Programmation Fonctionnelle Master 2 I2L apprentissage

S´ebastien Verel verel@univ-littoral.fr

http://www-lisic.univ-littoral.fr/~verel

Universit´e du Littoral Cˆote d’Opale Laboratoire LISIC Equipe OSMOSE

(2)

Fonctions pr´ ed´ efinies

Plusieurs fonctions de premier ordre sont d´ej`a d´efinies car ultra-classiques et tr`es utiles.

Nous allons en d´ecouvrir quelques unes par la pratique.

Pour chacune des fonctionnelles suivantes, donner leur d´efinition et un exemple d’utilisation.

(3)

Map

map f list

Appliquef`a tous les ´el´ements de la listelist.

map’ :: (a -> b) -> [ a ] -> [ b ] map’ _ [] = []

map’ f (h:t) = f h:(map’ f t)

(4)

Map

map f list

Appliquef`a tous les ´el´ements de la listelist.

map’ :: (a -> b) -> [ a ] -> [ b ] map’ _ [] = []

map’ f (h:t) = f h:(map’ f t)

(5)

Filter

filter predicat list

Supprime tous les ´el´ements de la liste list qui ne v´erifie pas le pr´edicat.

filter’ :: (a -> Bool) -> [ a ] -> [ a ] filter’ _ [] = []

filter’ pred (h:t) | pred h = h:(filter’ pred t)

| otherwise = filter’ pred t

(6)

Filter

filter predicat list

Supprime tous les ´el´ements de la liste list qui ne v´erifie pas le pr´edicat.

filter’ :: (a -> Bool) -> [ a ] -> [ a ] filter’ _ [] = []

filter’ pred (h:t) | pred h = h:(filter’ pred t)

| otherwise = filter’ pred t

(7)

Dropwhile

dropwhile predicat list

Supprime tous les ´el´ements en tˆete de la listelist tant que le pr´edicat est v´erifi´e.

dropWhile’ :: (a -> Bool) -> [ a ] -> [ a ] dropWhile’ _ [] = []

dropWhile’ pred (h:t) | pred h = dropWhile’ pred t

| otherwise = h:t

(8)

Dropwhile

dropwhile predicat list

Supprime tous les ´el´ements en tˆete de la listelist tant que le pr´edicat est v´erifi´e.

dropWhile’ :: (a -> Bool) -> [ a ] -> [ a ] dropWhile’ _ [] = []

dropWhile’ pred (h:t) | pred h = dropWhile’ pred t

| otherwise = h:t

(9)

Partition

partition predicat list

Produit 2 listes l’une v´erifiant le pr´edicat, l’autre ne le v´erifiant pas.

partition’ :: (a -> Bool) -> [ a ] -> ([ a ], [ a ]) partition’ _ [] = ([], [])

partition’ pred (h:t) | pred h = (h:l1, l2)

| otherwise = (l1, h:l2) where (l1, l2) = partition’ pred t

(10)

Partition

partition predicat list

Produit 2 listes l’une v´erifiant le pr´edicat, l’autre ne le v´erifiant pas.

partition’ :: (a -> Bool) -> [ a ] -> ([ a ], [ a ]) partition’ _ [] = ([], [])

partition’ pred (h:t) | pred h = (h:l1, l2)

| otherwise = (l1, h:l2) where (l1, l2) = partition’ pred t

(11)

All

all predicat list

Renvoietrue lorsque le pr´edicat est v´erifi´e pour tous les ´el´ements.

all’ :: (a -> Bool) -> [ a ] -> Bool all’ _ [] = True

all’ pred (h:t) = pred h && (all’ pred t)

(12)

All

all predicat list

Renvoietrue lorsque le pr´edicat est v´erifi´e pour tous les ´el´ements.

all’ :: (a -> Bool) -> [ a ] -> Bool all’ _ [] = True

all’ pred (h:t) = pred h && (all’ pred t)

(13)

Any

any predicat list

Renvoietrue lorsque le pr´edicat est v´erifi´e pour l’un des ´el´ements.

any’ :: (a -> Bool) -> [ a ] -> Bool any’ _ [] = False

any’ pred (h:t) = pred h || (any’ pred t)

(14)

Any

any predicat list

Renvoietrue lorsque le pr´edicat est v´erifi´e pour l’un des ´el´ements.

any’ :: (a -> Bool) -> [ a ] -> Bool any’ _ [] = False

any’ pred (h:t) = pred h || (any’ pred t)

(15)

Fold left

foldl f accumulateur list

fest une fonction `a deux variables. La fonction frenvoie la nouvelle valeur de l’accumulateur apr`es l’avoir appliqu´ee sur la tˆete et l’accumulateur.foldlapplique r´ecursivement de gauche `a droite la fonctionfaux ´el´ements de la liste `a partir de la valeur initiale donn´ee de l’accumulateur.

Penser `a la somme, au maximum, `a la concat´enation, etc.

foldl’ :: (b -> a -> b) -> b -> [a] -> b foldl’ _ acc [] = acc

foldl’ f acc (h:t) = foldl’ f (f acc h) t

(16)

Fold left

foldl f accumulateur list

fest une fonction `a deux variables. La fonction frenvoie la nouvelle valeur de l’accumulateur apr`es l’avoir appliqu´ee sur la tˆete et l’accumulateur.foldlapplique r´ecursivement de gauche `a droite la fonctionfaux ´el´ements de la liste `a partir de la valeur initiale donn´ee de l’accumulateur.

Penser `a la somme, au maximum, `a la concat´enation, etc.

foldl’ :: (b -> a -> b) -> b -> [a] -> b foldl’ _ acc [] = acc

foldl’ f acc (h:t) = foldl’ f (f acc h) t

(17)

Fold right

foldr f accumulateur list

fest une fonction `a deux variables. La fonction frenvoie la nouvelle valeur de l’accumulateur apr`es l’avoir appliqu´ee sur la tˆete et l’accumulateur.foldrapplique r´ecursivement de droite `a gauche la fonctionfaux ´el´ements de la liste `a partir de la valeur initiale donn´ee de l’accumulateur.

foldr’ :: (a -> b -> b) -> b -> [a] -> b foldr’ _ acc [] = acc

foldr’ f acc (h:t) = f h (foldr’ f acc t)

(18)

Fold right

foldr f accumulateur list

fest une fonction `a deux variables. La fonction frenvoie la nouvelle valeur de l’accumulateur apr`es l’avoir appliqu´ee sur la tˆete et l’accumulateur.foldrapplique r´ecursivement de droite `a gauche la fonctionfaux ´el´ements de la liste `a partir de la valeur initiale donn´ee de l’accumulateur.

foldr’ :: (a -> b -> b) -> b -> [a] -> b foldr’ _ acc [] = acc

foldr’ f acc (h:t) = f h (foldr’ f acc t)

Références

Documents relatifs

´ el´ ements plus petit que l’´ etiquette sont dans l’arbre gauche et tous les ´ el´ ements plus grand que l’´ etiquette sont dans l’arbre droit. searchOrd _ Empty

L’insertion et la suppression utilisent la rotation ` a gauche et ` a droite d’un arbre lorsqu’il est trop d´ es´ equilibr´ e :.

´ el´ ements plus petit que l’´ etiquette sont dans l’arbre gauche et tous les ´ el´ ements plus grand que l’´ etiquette sont dans l’arbre droit. searchOrd :: (Ord a) =>

Motif : expression compos´ e de variables libres ou li´ ees, ainsi que des valeurs litt´ erales (atomes, entiers ou chaines) Expression : expression compos´ e de structures de

Est-il possible de r´ esoudre le probl` eme ` a l’aide de la r´ esolution du probl` eme portant sur une (des) ”plus petite(s)” valeur(s) du param` etre. Si oui,

Connaitre le sch´ ema r´ ecursif du traitement d’une liste Connaitre les algorithmes classiques relatifs aux listes Savoir ´ ecrire une fonction de calcul avec accumulateur, de

Calcul consiste en l’´ evaluation d’une fonction pour ´ eviter toute modification ”d’´ etats”.. R´ esultat d´ epend seulement des entr´ ees et non pas de l’´ etat

Dans le module lists, plusieurs fonctions de premier ordre sont d´ ej` a d´ efinies car ultra-classiques et tr` es utiles.. Nous allons en d´ ecouvrir quelques unes par