projprog/HSK8.md

16 lines
1.5 KiB
Markdown

# Haskell 8
1. Les chaines de caractères sont des listes de caractères.
2. Une liste a un seul type d'élément mais on peut rajouter des éléments en tête. Un tuple peut être constitué de variables de types différents, mais ne peut pas être agrandi.
3. Les tuples sont intérésants si on souhaite manipuler un jeu de données «en bloc».
4. (Un `s` s'est transformé en `d`). `sort` s'applique à une list et renvoie une liste contenant les mêmes éléments, mais dans l'ordre. `fst` prend en entrée un tuple, et renvoie le premier élément du tuple.
5. `sort` fonctionne pour des listes dont le type d'éléments étend la classe `Ord` (donc pas tous).
6. Dans ce code, `y` a dans le corps du `let` pour valeur `3`, le corps étant la partie `y+4`.
7. Cette expression correspond à la chaine de caractères `"dg"` (une liste de deux éléments).
8. L'expression indiquée renvoie un booléen de type `Bool`.
9. `sort` est une fonction alors que `:` est un constructeur. Une application pratique est que l'on peut faire du *pattern matching* sur `:` mais pas sur `sort`.
10. `map (*2) [1,4,7]` applique la fonction *multiplier par deux* à la liste donnée, ce qui renvoie la liste `[2,8,14]`.
11. `let addTwo=(+2) in addTwo 4` ou `let addTwo y = y+2 in addTwo 4`.
12. Dans cette expression, le pattern est `(t,q)` qui *match* n'importe quel tuple de 2 éléments (ou *2uplet* ou *paire*).
13. Ces deux expression renvoient la même valeur, puisque le type des listes est défini de manière inductive, `a:_:_:_` est une simplification syntaxique pour `a:(_:(_:_))`.