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

1.4 KiB

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)
arbreSomme :: Num t => Arbre t -> t
arbreSomme Feuille = 0
arbreSomme (Noeud v a b) = v + (arbreSomme a) + (arbreSomme b)
  1. Le type sur les arbres polymorphiques est donné ci-dessus. Pour les arbres Float, on aurait pour type Arbre t -> t
  2. 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).
  3. head sur une liste vide renvoie une exception.
headSafe :: [t] -> Maybe t
headSafe [] = Nothing
headSafe (e:s) = Just e
  1. data Arbre t = Noeud t (Maybe (Arbre t)) (Maybe (Arbre t))