11.07.2015 Views

Programmation fonctionnelle (Haskell)

Programmation fonctionnelle (Haskell)

Programmation fonctionnelle (Haskell)

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

everse : : [ a ] −> [ a ]reverse = f o l d l rcons [ ]where rcons xs x = x : xsL’opération scanl applique une opération foldl à chaque segment initial d’uneliste. Ainsi, scanl (+) 0 calcule la liste des sommes accumulées d’une liste denombres et scanl (∗) 1 [1.. n] calcule la liste des n premiers factoriels. Ladéfinition de scanl comprend une fonction auxiliaire, qui retourne la liste detous les segments initials d’une liste, par exempleOn ainits[x 0 , x 1 , x 2 ] = [[], [x 0 ], [x 0 , x 1 ], [x 0 , x 1 , x 2 ]].i n i t s : : [ a ] −> [ [ a ] ]i n i t s [ ] = [ [ ] ]i n i t s ( x : xs ) = [ ] : map ( x : ) ( i n i t s xs )ou alternativementi n i t s = foldr f [ [ ] ] where f x xss = [ ] : map ( x : ) xssL’opération scanl elle-même est définie commescanl : : ( a −> b −> b ) −> b −> [ a ] −> [ b ]scanl f e = map ( f o l d l f e ) . i n i t sL’opération duale de scanl est scanr définie parscanr : : ( a −> b −> b ) −> b −> [ a ] −> [ b ]scanr f e = map ( foldr f e ) . t a i l soù la fonction tails retourne les segments finals d’une liste, par exempleOn peut définir tails partails[x 0 , x 1 , x 2 ] = [[x 0 , x 1 , x 2 ], [x 1 , x 2 ], [x 2 ], []].t a i l s : : [ a ] −> [ [ a ] ]t a i l s [ ] = [ [ ] ]t a i l s ( x : xs ) = ( x : xs ) : t a i l s xs5 Les types de données abstraitsLa définition d’un type (de données) concret comprend la description des valeursqui appartiennent à ce type. En revanche, la définition d’un type de données abstrait(dite TDA) comprend la description des opérations susceptibles aux valeurs quiappartiennent à ce type sans spécifier la représentation de ces valeurs-mêmemes.En particulier, la définition d’un TDA comprend :– une signature : la liste des opérations et leurs types22

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!