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]`.