2.5 KiB
Haskell 7
Exercice 1
- Houla. On peut définir une fonction comme une relation binaire fonctionelle, c'est à dire une partie de X*Y telle pour tout x dans X, y y' dans Y, x en relation avec y et x en relation avec y' implique y=y'.
Sinon, on peut définir une fonction comme étant un «mapping», un boîte qui à un élément de l'entrée associe un élément de la sortie. C'est aussi un morphisme d'ensembles du point de vu de la théorie des catégories.
-
La fonction sort a pour entrée une
int listet pour sortie aussi uneint list. La fonction renvoie alors la liste ordonée ayant exactement les même éléments que son entrée. -
(+) 3 4appelle la fonction(+)(version préfixée de+) de typeint -> int -> inten lui envoyant l'entier3(qui renvoie une fonction du typeint -> int) et appliquant ce résultat à l'entier4. -
On peut conclure .... que les opérateurs ne sont que des écritures infixées de fonctions et n'ont pas d'autre différence fondamentale. Il en va de même pour tout ce qu'on a vu:
-,*, mais aussi++.
Exercice 2
- Le texte
Preludedans l'invite de commande GHCi indique ce qui est chargé avant l'évaluation d'expressions Haskell. Par défaut, il y a uniquement un seul module, appeléPreludecontenant les opérations de base. - Avec un prélude vide, pour appeler les fonctions disponibles, on peut donner leur nom complet, c'est à dire avec le nom du module les englobant. Par exemple
Data.List.sort.
On peut aussi appeler import Nom.Du.Module afin de l'ajouter au prélude et d'ainsi pouvoir ignorer le nom complet et indiquer uniquement le nom de la fonction.
Prelude Data.List> mod 4 3Prelude Data.List> even 42Prelude Data.List> gcd 18 12Prelude Data.List> head [2,56,4,9]Prelude Data.List> last [2,56,4,9]Prelude Data.List> tail [2,56,4,9]Prelude Data.List> length [2,56,4,9]Prelude Data.List> reverse [2,56,4,9]Prelude Data.List> maximum [2,56,4,9]Prelude Data.List> elem 3 [2,56,4,9]Prelude Data.List> concat [[5,7],[67,87]]Prelude Data.List> take 3 [2,56,4,9]Prelude Data.List> drop 2 [2,56,4,9]Prelude Data.List> fst (45,"Orleans")Prelude Data.List> snd (45,"Orleans")
Exercice 3
Prelude> :load fstfunc.hs*Main> addTwo 3- Cette fonction peut prendre en entrée tout type étant une instance de la classe
Num, à savoirWord,Integer,Int,FloatetDouble.