22 lines
1.7 KiB
Markdown
22 lines
1.7 KiB
Markdown
# Haskell 9
|
|
|
|
### Exercice 1
|
|
1. Le typage statique permet d'éviter certaines erreurs de programmation en les capturant dès la compilation (comme ajouter un entier et une chaine de caractères par exemple).
|
|
2. Y a des choses non typées en Haskell ? À la limite les commandes de l'interpréteur.
|
|
3. `:t 'a'` affiche le type de l'objet `'a'`, c'est à dire `Char`.
|
|
4. L'opérateur `::` signifie ici *est du type*
|
|
5. `Int` est un entier machine, de 32 ou 64 bits typiquement. `Integer` est un entier mathématique *théoriquement* non borné.
|
|
6. Cette différence permet de coder des algorithmes «machine» comme les codages binaires, les opérations bit à bit, et les entiers `Integer` permettent de coder sans se soucier de dépassement de la capacité de l'entier, qui peut amener des bugs plutôt étranges. De telles considérations peuvent simplifier les preuves d'algorithme.
|
|
7. Haskell prévoit les types `Double` et `Float` pour représenter les réels, respectivement sur 64 et 32 bits.
|
|
8. Les booléens sont appelés `Bool`.
|
|
9. Les caractères sont appelés `Char`.
|
|
|
|
### Exercice 2
|
|
|
|
1. Un type explicite est un type donné ... explictiement à une variable, sans le déduire du contexte.
|
|
2. `True` est du type `Bool` (c'est un booléen).
|
|
3. `"string` est du type `[Char]` (une liste de caractères)
|
|
4. `('e', False)` est du type `(Char, Bool)` (un 2-uplet avec un caractère en premier élément et un booléen en second élément).
|
|
5. Les types de ces trois variables sont différents. Certes ils sont tous des tuples, mais *tuple* est une classe de types. Le premier est un tuple `(Char, Bool)`, le second un tuple `([Char], Bool)` et le dernier un tuple `(Char, Bool, [Char])`.
|
|
|