Haskell : Type et contraintes de classes des fonctions.

Exercices Corriges en Haskell : Type et contraintes de classes des fonctions.

Considérez les définitions suivantes :

  • appl (f , x) = f x
  • pair x y = (x ,y )
  • mult x y = x * y
  • double = mult 2
  • sym (x , y) = x == y
  • palindrome xs = reverse xs == xs
  • twice f x = f (f x)
  • incrAll xs = map (+1)  xs
  • norme xs = sqrt ( sum ( map f xs )) where f x = x ^2
  • greaters n xs = [ x | x <- xs, x > n ]
  • menu xs = concat ( map f ( zip [1.. length xs ] xs )) where f (n ,x ) = "("++ show n ++") " ++ show x ++ "\ n"

1. Calculez les types de toutes ces fonctions.

2. Énumérez tous les opérateurs et/ou fonctions surchargées qui apparaissent dans ces définitions (à la droite de l’égalité simple), avec leur types et contraintes de classe. Parmi ces fonctions, quelles sont des méthodes de classe ?

3. Affinez le calcul des types en ajoutant les contraintes de classe au type d’une fonction, lorsque un méthode (ou une fonction soumise à des contraintes) apparaît dans le corps de la définition.

4. Quelles sont les fonctions de deux arguments ? Si une telle fonction n’est pas en forme currifiée, donnez une définition équivalente qui soit en forme currifiée.

5. Que fait la fonction map ? Quel est son type ?

6. Quelles sont les fonctions d’ordre supérieur ?

7. Quelles sont les fonctions polymorphes ?

Haskell pandacodeur

Correction :

1) Types des fonctions :

  • appl : (a -> b, a) -> b
  • pair : a -> b -> (a, b)
  • mult : Num a => a -> a -> a
  • double : Num a => a -> a
  • sym : Eq a => (a, a) -> Bool
  • palindrome : Eq a => [a] -> Bool
  • twice : (a -> a) -> a -> a
  • incrAll : Num a => [a] -> [a]
  • norme : (Floating a, Foldable t, Functor t) => t a -> a
  • greaters : Ord a => a -> [a] -> [a]
  • menu : Show a => [a] -> String

2) Fonctions surchargées :

  • (+) : Num a => a -> a -> a
  • (*) : Num a => a -> a -> a
  • (==) : Eq a => a -> a -> Bool
  • reverse : [a] -> [a]
  • sqrt : Floating a => a -> a
  • map : Functor f => (a -> b) -> f a -> f b
  • zip : [a] -> [b] -> [(a, b)]
  • length : Foldable t => t a -> Int
  • show : Show a => a -> String

2-1) Méthodes de classe :

  • (+), (*), (==) : méthodes de Num
  • (==) : méthode de Eq
  • sqrt : méthode de Floating
  • map : méthode de Functor
  • length : méthode de Foldable
  • show : méthode de Show

3) Types affinés :

  • appl : (a -> b, a) -> b
  • pair : a -> b -> (a, b)
  • mult : Num a => a -> a -> a
  • double : Num a => a -> a
  • sym : Eq a => (a, a) -> Bool
  • palindrome : Eq a => [a] -> Bool
  • twice : (a -> a) -> a -> a
  • incrAll : Num a => [a] -> [a]
  • norme : (Floating a, Foldable t, Functor t) => t a -> a
  • greaters : Ord a => a -> [a] -> [a]
  • menu : Show a => [a] -> String

4) Fonctions de deux arguments :

  • pair
  • mult
  • sym
  • greaters

4-1) Définitions équivalentes currifiées :

  1. pair' x = \y -> (x, y)
  2. mult' x = \y -> x * y
  3. sym' x = \y -> x == y
  4. greaters' n = filter (>n)

5) La fonction map applique une fonction donnée à tous les éléments d'une structure de données (liste, tableau, etc.) et renvoie une nouvelle structure de données contenant les résultats.

Son type est : Functor f => (a -> b) -> f a -> f b

6) Fonctions d'ordre supérieur :

  • twice
  • incrAll
  • norme
  • greaters
  • menu

7) Fonctions polymorphes :

  • appl
  • pair
  • sym
  • palindrome
  • twice
  • incrAll
  • norme
  • greaters
  • map
  • zip

Si vous avez trouvé les exercices corrigés en Haskell de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 658395978 | Réaliser Par Joël_Yk

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam