projprog/HSK22.md
2022-01-08 04:21:26 +01:00

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.