25 lines
989 B
Markdown
25 lines
989 B
Markdown
# Haskell 22
|
|
|
|
### Exercice 1
|
|
|
|
1. Cette expression crée un type appelé `Vector` qui peut être instancié avec un seul constructeur: `Vec3` qui prend en paramètre trois flottants.
|
|
2.
|
|
```
|
|
magnitude :: Vector -> Float
|
|
magnitude (Vec3 a b c) = sqrt (a*a+b*b+c*c)^
|
|
```
|
|
|
|
### Exercice 2
|
|
1. Cette expression crée un type polymorphique de vecteur à trois coordonées, qui peuvent être de n'importe quel type.
|
|
2. L'expression donnée est donc du type `Vector [Char]`.
|
|
3. Là où cette autre expression est du type `Vector Int` (ou plutôt `Num t => Vector t`)
|
|
4. Celle ci est du type Vector Float (on a forcé le type d'un élément, donc de t, donc du vecteur).
|
|
5. `data Liste t = Liste Integer [t]`
|
|
6. `initListe = Liste 0 []`
|
|
7.
|
|
```
|
|
ajouteListe::Liste t -> t -> Liste t
|
|
ajouteListe (Liste n s) x = Liste (n+1) (x:s)
|
|
```
|
|
8. Cette liste permet d'implémenter la fonction `length` en temps constant, au prix d'un coût à peine plus élevé lors du l'ajout et un petit peu plus de mémoire.
|