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 ?
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 :
- pair' x = \y -> (x, y)
- mult' x = \y -> x * y
- sym' x = \y -> x == y
- 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
Ajouter un commentaire