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...

Create successful ePaper yourself

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

Jaromír BRAMBOR4.3. PRIMITIVES DE STOCKAGE ET DE REPRÉSENTATION DES DONNÉESfoldr, foldl La fonction foldr est une autre fonction <strong>de</strong> réduction d’un stream. Se différenciant <strong>de</strong> <strong>la</strong>précé<strong>de</strong>nte, foldr1, elle utilise une valeur d’entrée d’un autre type que celui du stream. Ainsi, ellepermet d’effectuer <strong>la</strong> réduction sur un stream d’une manière plus générale. Elle commence parl’application <strong>de</strong> <strong>la</strong> fonction f sur <strong>la</strong> valeur d’entrée et réutilise le résultat itérativement sur tous lesautres éléments <strong>de</strong> <strong>la</strong> liste.foldr :: (α → β → β) → β → [α] → βfoldr f z [ ] = zfoldr f z (x :xs) = f x ( foldr f z xs)L’utilité <strong>de</strong> cette fonction est évi<strong>de</strong>nte. Un exemple que nous pouvons donner <strong>pour</strong> illustrer lescas d’utilisation <strong>de</strong> cette fonction peut être le calcul d’un histogramme où nous voulons obtenir, àpartir d’une liste <strong>de</strong>s éléments triviaux, tels que <strong>de</strong>s numéros, une structure plus complexe, tel quel’histogramme.La fonction foldl travaille pareillement, mais elle exécute <strong>la</strong> réduction à partir <strong>de</strong> <strong>la</strong> fin <strong>de</strong> <strong>la</strong> listeet progresse vers l’avant.filter retourne <strong>la</strong> liste avec les éléments qui satisfont le critère p. Nous pouvons y percevoir le calculsur les streams et faire ainsi un lien avec le kernel <strong>de</strong> filtrage que nous avons décrit dans 3.4.1.3,page 45 :filter:: (α → Bool) → [α] → [α]filter p [ ] = [ ]filter p (x :xs) | p x = x : filter p xs| otherwise = filter p xszip crée, à partir <strong>de</strong> <strong>de</strong>ux listes, une liste <strong>de</strong>s tuples où chacun <strong>de</strong>s tuples contient, respectivement, unélément <strong>de</strong> <strong>la</strong> première liste et un élément <strong>de</strong> <strong>la</strong> <strong>de</strong>uxième, e.g. zip [1, 2, 3] [4, 5, 6] a <strong>pour</strong> résultat[(1, 4), (2, 5), (3, 6)] :zip :: [α] → [β] → [ (α,β)]zip (x :xs) (y:ys) = (x ,y) : zip xs yszip _ _ = [ ]fst retourne le premier élément d’un tuple :fst :: (α,β) → αfst (x ,_) = xsnd retourne le <strong>de</strong>uxième élément d’un tuple :snd :: (α,β) → βsnd (_,y) = y4.3 Primitives <strong>de</strong> stockage et <strong>de</strong> représentation <strong>de</strong>s donnéesNous définissons <strong>de</strong> nouveaux types <strong>pour</strong> le stockage et <strong>la</strong> représentation <strong>de</strong>s données en nous appuyantsur les types <strong>de</strong> base du Haskell. Pour <strong>la</strong> plupart, nous n’allons utiliser que <strong>la</strong> redéfinition <strong>de</strong>si<strong>de</strong>ntificateurs <strong>de</strong>s types déjà existants afin d’introduire au type l’information sémantique qui nous serviraà être c<strong>la</strong>ir et compréhensible dans les définitions complexes. Notons que les i<strong>de</strong>ntificateurs <strong>de</strong> typedans Haskell doivent commencer par une lettre majuscule.Deux mot clés du Haskell sont dédiés à ce but, data et type. Le mot clé data qui définit un véritablenouveau type <strong>de</strong> données, e.g. <strong>la</strong> définitiondata AB = A | Bdéfinit le type énumératif avec <strong>de</strong>ux i<strong>de</strong>ntificateurs possibles – A et B. Le mot clé type définit un nouveli<strong>de</strong>ntificateur du type en se basant sur les types déjà existants ou sur leur combinaison. Par exemple,l’expression63

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

Saved successfully!

Ooh no, something went wrong!