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