12.07.2015 Views

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Algorithmes</strong> <strong>de</strong> <strong>la</strong> <strong>morphologie</strong> <strong>mathématique</strong> <strong>pour</strong> les architectures orientées fluxJaromír BRAMBORLa co<strong>de</strong> source <strong>de</strong> l’i<strong>de</strong>ntité polymorphe en Haskell est le suivant :id :: a -> aid x = xLe côté pratique <strong>de</strong> notre approche rési<strong>de</strong> dans <strong>la</strong> possibilité <strong>de</strong> vérifier automatiquement <strong>la</strong> syntaxe et lefonctionnement <strong>de</strong>s définitions en utilisant le compi<strong>la</strong>teur GHC GHC du Haskell, car toutes les définitionssont également les fonctions définies dans ce <strong>la</strong>ngage.4.2.2 Fonctions <strong>de</strong> base du HaskellLes définitions <strong>de</strong>s fonctions que nous décrivons à cette p<strong>la</strong>ce appartiennent à <strong>la</strong> base <strong>de</strong> <strong>la</strong> programmationfonctionnelle et sont incluses dans Haskell. Vu qu’elles se trouvent abondamment employéesdans nos prochaines <strong>de</strong>scriptions, nous tenons à présenter au lecteur leurs définitions exactes.: est le constructeur d’une liste qui travaille avec un élément et une autre liste comme les arguments.Par exemple, l’expression a : [] définit <strong>la</strong> liste [a] avec un seul élément a. Les listes contenantplusieurs éléments peuvent être construites par l’applications successives <strong>de</strong> ces constructeurs,e.g. a : b : c : [] construit <strong>la</strong> liste [a, b, c].$ est un opérateur d’application qui applique une fonction sur un paramètre. Il est utilisé dans uneécriture <strong>de</strong>nse ou là où l’on veut explicitement insister sur l’application <strong>de</strong> <strong>la</strong> fonction sur unparamètre :( $ ) :: (α → β) → α → βf $ = λx → f (x)◦ est un infixe <strong>de</strong> composition, il crée à partir <strong>de</strong> <strong>de</strong>ux fonctions une seule fonction composée :( ◦ ) :: (β → γ) → (α → β) → α → γf ◦ g = λx → f (g(x))\ est un infixe <strong>de</strong> différence <strong>de</strong> <strong>de</strong>ux listes, e.g. l’expression [1, 2, 3, 4] \[2, 4] donne comme résultat uneliste [1, 3].+ est un infixe <strong>de</strong> <strong>la</strong> concaténation <strong>de</strong> <strong>de</strong>ux listes, e.g. l’expression [1, 2] +[3, 4] donne comme résultatune liste [1, 2, 3, 4].map applique une fonction à chaque élément d’une liste. Nous pouvons y percevoir le calcul sur lesstreams et faire ainsi un lien avec le kernel d’application que nous avons décrit dans 3.4.1.1,page 45. Sa définition utilise <strong>la</strong> récursion :map :: (α → β) → [α] → [β]map f [ ] = [ ]map f (x :xs) = f x : (map f xs)foldr1, foldl1 La fonction foldr1 prend les <strong>de</strong>ux <strong>de</strong>rniers éléments d’une liste et applique sur eux unefonction. Puis elle applique cette même fonction entre le résultat obtenu et le troisième élémentà partir <strong>de</strong> <strong>la</strong> fin <strong>de</strong> <strong>la</strong> liste. Et ainsi <strong>de</strong> suite juqsu’à ce que tous les éléments soit traités. Nouspouvons y percevoir le calcul sur les streams et faire ainsi un lien avec le kernel <strong>de</strong> réduction quenous avons décrit dans 3.4.1.2, page 45 :foldr1 :: (α → α → α) → [α] → αfoldr1 f [x ] = xfoldr1 f (x :xs) = f x ( foldr1 f xs)Une autre fonction, foldl1, travaille semb<strong>la</strong>blement mais elle commence le traitement à partir dudébut <strong>de</strong> <strong>la</strong> liste et progresse vers l’arrière.62

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

Saved successfully!

Ooh no, something went wrong!