66 lines
2.5 KiB
Markdown
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`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|