projprog/HSK7.md

66 lines
2.5 KiB
Markdown

# Haskell 7
### Exercice 1
1. Houla. On peut définir une fonction comme une relation binaire fonctionelle, c'est à dire une partie de X*Y telle pour tout x dans X, y y' dans Y, x en relation avec y et x en relation avec y' implique y=y'.
Sinon, on peut définir une fonction comme étant un «mapping», un boîte qui à un élément de l'entrée associe un élément de la sortie. C'est aussi un morphisme d'ensembles du point de vu de la théorie des catégories.
2. La fonction sort a pour entrée une `int list` et pour sortie aussi une `int list`. La fonction renvoie alors la liste ordonée ayant exactement les même éléments que son entrée.
3. `(+) 3 4` appelle la fonction `(+)` (version préfixée de `+`) de type `int -> int -> int` en lui envoyant l'entier `3` (qui renvoie une fonction du type `int -> int`) et appliquant ce résultat à l'entier `4`.
4. On peut conclure .... que les opérateurs ne sont que des écritures infixées de fonctions et n'ont pas d'autre différence fondamentale. Il en va de même pour tout ce qu'on a vu: `-`,`*`, mais aussi `++`.
### Exercice 2
1. Le texte `Prelude` dans l'invite de commande GHCi indique ce qui est chargé avant l'évaluation d'expressions Haskell. Par défaut, il y a uniquement un seul module, appelé `Prelude` contenant les opérations de base.
2. Avec un prélude vide, pour appeler les fonctions disponibles, on peut donner leur nom complet, c'est à dire avec le nom du module les englobant. Par exemple `Data.List.sort`.
On peut aussi appeler `import Nom.Du.Module` afin de l'ajouter au prélude et d'ainsi pouvoir ignorer le nom complet et indiquer uniquement le nom de la fonction.
3. `Prelude Data.List> mod 4 3`
4. `Prelude Data.List> even 42`
5. `Prelude Data.List> gcd 18 12`
6. `Prelude Data.List> head [2,56,4,9]`
7. `Prelude Data.List> last [2,56,4,9]`
8. `Prelude Data.List> tail [2,56,4,9]`
9. `Prelude Data.List> length [2,56,4,9]`
10. `Prelude Data.List> reverse [2,56,4,9]`
11. `Prelude Data.List> maximum [2,56,4,9]`
12. `Prelude Data.List> elem 3 [2,56,4,9]`
13. `Prelude Data.List> concat [[5,7],[67,87]]`
14. `Prelude Data.List> take 3 [2,56,4,9]`
15. `Prelude Data.List> drop 2 [2,56,4,9]`
16. `Prelude Data.List> fst (45,"Orleans")`
17. `Prelude Data.List> snd (45,"Orleans")`
### Exercice 3
1. `Prelude> :load fstfunc.hs`
2. `*Main> addTwo 3`
3. Cette fonction peut prendre en entrée tout type étant une instance de la classe `Num`, à savoir `Word`, `Integer`, `Int`, `Float` et `Double`.