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

25 lines
1.4 KiB
Markdown

# Haskell 23
### Exercice 1
1. L'expression crée le type `Verité` qui n'a que deux constructeurs d'arité 0.
2. L'expression suivante crée un type `Arbre` défini inductivement comme étant soit une feuille, soit un nœud composé d'un flottant et de deux sous-arbres.
3. L'expression donnée crée une instance du type arbre construite par le constructeur `Noeud` avec comme valeurs le flottant 5, une instance du type arbre consturite par le constructeur `Noeud` avec comme valeur le flottant 2 et deux fois l'arbre contstruit par le constructeur `Feuille`, ainsi que une instance du type arbre construite par le constructeur `Noeud` avec comme valeur le flottant 7 et deux fois l'arbre construit par le constructeur `Feuille`.
4. On peut définir le type `data Arbre t = Noeud t (Arbre t) (Arbre t)`
5.
```
arbreSomme :: Num t => Arbre t -> t
arbreSomme Feuille = 0
arbreSomme (Noeud v a b) = v + (arbreSomme a) + (arbreSomme b)
```
6. Le type sur les arbres polymorphiques est donné ci-dessus. Pour les arbres Float, on aurait pour type `Arbre t -> t`
7. Ce type correspond à une valeur de type `t` qui peut ne pas avoir été renvoyée. C'est un espèce de `null` du langagae fonctionnel. Il est ou bien présent (`Just a`) ou absent (`Nothing`).
8. `head` sur une liste vide renvoie une exception.
9.
```
headSafe :: [t] -> Maybe t
headSafe [] = Nothing
headSafe (e:s) = Just e
```
10. `data Arbre t = Noeud t (Maybe (Arbre t)) (Maybe (Arbre t))`