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.

Annexe AFonctions <strong>pour</strong> assurer l’exécution en cyclesIl est propre à <strong>la</strong> programmation impérative d’utiliser les cycles et <strong>de</strong> les gérer par les variablessauvegardant l’état <strong>pour</strong> exprimer l’itération actuelle. En revanche, l’approche fonctionnelle à <strong>la</strong> programmationne travaille pas avec l’information sur l’état du programme et les cycles ne sont pas définisa priori. L’exécution itérative se <strong>pour</strong>suit par les appels récursifs <strong>de</strong> <strong>la</strong> fonction qui évalue elle-même si<strong>la</strong> récursion doit prendre fin ou si elle doit se <strong>pour</strong>suivre.Haskell fournit les fonctions <strong>de</strong> base <strong>pour</strong> assurer l’exécution itérative mais le choix final <strong>de</strong> <strong>la</strong> manièreexacte <strong>de</strong> cette exécution est à définir par l’utilisateur.La fonction iterate, standard du Haskell assure l’application itérative <strong>de</strong> <strong>la</strong> fonction f sur x. Elle créeune liste infinie qui contient comme premier élément <strong>la</strong> variable d’entrée x, comme <strong>de</strong>uxième le résultat<strong>de</strong> <strong>la</strong> première itération, puis <strong>de</strong> <strong>la</strong> <strong>de</strong>uxième etc. :iterate :: (α → α) → α → [α]iterate f x = x : iterate f (f x)Par exemple, <strong>la</strong> fonctioniterate ( +1) 1a <strong>pour</strong> résultat <strong>la</strong> liste infinie [1, 2, 3, 4, 5, .....]. Pour obtenir un nombre défini d’itérations à partir <strong>de</strong>cette liste, nous utilisons <strong>la</strong> fonction take, standard du Haskell, qui retourne <strong>la</strong> liste finie composée <strong>de</strong> npremiers éléments <strong>de</strong> <strong>la</strong> liste (x : xs) :take :: Int → [α] → [α]take 0 _ = [ ]take _ [ ] = [ ]take n (x :xs)| n > 0 = x : take (n−1) xstake _ _ = error "take"Pour obtenir le résultat <strong>de</strong> l’exécution itérative, il suffit <strong>de</strong> prendre le <strong>de</strong>rnier élément <strong>de</strong> <strong>la</strong> liste crééepréa<strong>la</strong>blement par les fonctions iterate et take. La fonction <strong>la</strong>st, standard du Haskell, assure cette possibilité:<strong>la</strong>st :: [α] → α<strong>la</strong>st [x ] = x<strong>la</strong>st (_:xs) = <strong>la</strong>st xsAinsi, l’exécution <strong>de</strong> n itérations <strong>de</strong> <strong>la</strong> fonction f sur les données x est assurée par l’expressionsuivante :<strong>la</strong>st ◦ (take (n+1)) ◦ ( iterate f ) $ x199

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

Saved successfully!

Ooh no, something went wrong!