Haskell : Les Generalités (QCM)

Exercices Corriges en Haskell : generalites sur haskell PARTIE 01

1. Quel est le type de données renvoyé par la fonction `foldr` ?
   a. Une valeur unique  
   b. Une liste triée  
   c. La liste d'entrée dans l'ordre inverse  

2. Comment peut-on générer une liste de n entiers consécutifs en Haskell ?
   u. take n enumFrom 1  
   v. enumFromTo 1 n  
   w. take (n-1) [1..(n+1)]  

3. **Une fonction d'ordre supérieur :**
   n. est une fonction qui utilise des variables locales  
   o. est une fonction qui prend une ou plusieurs fonctions en arguments  
   p. est une fonction qui utilise des boucles  

4. **Dans Haskell, comment peut-on définir un nouveau type de données nommé `MyType` qui est une paire d'entiers ?**
   g. type MyType = (Int, Int)  
   h. data MyType = (Int, Int)  
   i. type MyType = Int -> Int -> (Int, Int)  

5. **Quelle est la différence entre `map` et `foldr` ?**
   a. map transforme chaque élément d'une liste, tandis que foldr combine les éléments d'une liste  
   b. map combine les éléments d'une liste, tandis que foldr transforme chaque élément d'une liste  
   c. Il n'y a pas de différence, ce sont des synonymes  

6. **La transparence référentielle :**
   b. signifie que l'évaluation d'une expression dépend de son contexte  
   c. signifie qu'une fonction peut modifier des variables globales  
   d. signifie que l'évaluation d'une expression ne dépend que des valeurs de ses arguments  

7. **L'évaluation paresseuse :**
   p. permet d'évaluer une expression en utilisant le moins de ressources possible  
   q. permet d'évaluer une expression avant que sa valeur soit nécessaire  
   r. permet de reporter l'exécution d'une expression jusqu'à ce que sa valeur soit nécessaire  

8. **À quoi sert la récursivité dans les fonctions ?**
   m. À effectuer des boucles  
   n. À diviser une liste en sous-listes  
   o. À résoudre des problèmes complexes en les divisant en sous-problèmes plus petits  

9. **Les classes de types :**
   l. permettent de définir des opérations qui s'appliquent à plusieurs types  
   m. sont une alternative aux interfaces dans les langages orientés objet  
   n. toutes les réponses ci-dessus  

10. **Quel est le résultat de l'application de la fonction `take 3` à la liste `[1, 3, 5, 7, 9]` ?**
    g. [1, 3]  
    h. [1, 3, 5, 7]  
    i. [1, 3, 5] 

Haskell pandacodeur

Correction :

1. **Quel est le type de données renvoyé par la fonction `foldr` ?**
   - Réponse : a. Une valeur unique

   **Explication :** La fonction `foldr` (fold right) combine les éléments d'une liste en une seule valeur en utilisant une fonction et une valeur de départ. Par exemple, `foldr (+) 0 [1, 2, 3]` retourne 6, qui est une valeur unique.

2. **Comment peut-on générer une liste de n entiers consécutifs en Haskell ?**
   - Réponse : v. enumFromTo 1 n

   **Explication :** La fonction `enumFromTo 1 n` génère une liste d'entiers allant de 1 à n inclus. Par exemple, `enumFromTo 1 5` donne `[1, 2, 3, 4, 5]`.

3. **Une fonction d'ordre supérieur :**
   - Réponse : o. est une fonction qui prend une ou plusieurs fonctions en arguments

   **Explication :** Une fonction d'ordre supérieur est une fonction qui prend une ou plusieurs fonctions en arguments et/ou retourne une fonction. Par exemple, `map` et `filter` sont des fonctions d'ordre supérieur.

4. **Dans Haskell, comment peut-on définir un nouveau type de données nommé `MyType` qui est une paire d'entiers ?**
   - Réponse : g. type MyType = (Int, Int)

   **Explication :** La déclaration `type MyType = (Int, Int)` définit `MyType` comme un alias pour une paire d'entiers. Par exemple, `let a = (3, 4) :: MyType`.

5. **Quelle est la différence entre `map` et `foldr` ?**
   - Réponse : a. map transforme chaque élément d'une liste, tandis que foldr combine les éléments d'une liste

   **Explication :** La fonction `map` applique une fonction à chaque élément d'une liste et retourne une nouvelle liste. Par exemple, `map (+1) [1, 2, 3]` donne `[2, 3, 4]`. En revanche, `foldr` combine les éléments d'une liste en une seule valeur.

6. **La transparence référentielle :**
   - Réponse : d. signifie que l'évaluation d'une expression ne dépend que des valeurs de ses arguments

   **Explication :** La transparence référentielle signifie que pour toute expression, si vous remplacez l'expression par sa valeur, le comportement du programme ne change pas. C'est un principe clé de la programmation fonctionnelle.

7. **L'évaluation paresseuse :**
   - Réponse : r. permet de reporter l'exécution d'une expression jusqu'à ce que sa valeur soit nécessaire

   **Explication :** L'évaluation paresseuse (lazy evaluation) retarde l'évaluation d'une expression jusqu'à ce que sa valeur soit effectivement nécessaire. Cela permet de travailler avec des structures de données potentiellement infinies.

8. **À quoi sert la récursivité dans les fonctions ?**
   - Réponse : o. À résoudre des problèmes complexes en les divisant en sous-problèmes plus petits

   **Explication :** La récursivité est utilisée pour résoudre des problèmes en les divisant en sous-problèmes plus petits du même type. Par exemple, la somme des éléments d'une liste peut être définie de manière récursive.

9. **Les classes de types :**
   - Réponse : n. toutes les réponses ci-dessus

   **Explication :** Les classes de types en Haskell permettent de définir des opérations génériques qui peuvent être utilisées avec différents types, de manière similaire aux interfaces dans les langages orientés objet.

10. **Quel est le résultat de l'application de la fonction `take 3` à la liste `[1, 3, 5, 7, 9]` ?**
    - Réponse : i. [1, 3, 5]

    **Explication :** La fonction `take 3` prend les trois premiers éléments d'une liste. Par exemple, `take 3 [1, 3, 5, 7, 9]` retourne `[1, 3, 5]`.

Si vous avez trouvé les exercices corrigés en Haskell de 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

  • 1 vote. Moyenne 4 sur 5.

Ajouter un commentaire

Anti-spam