2.9 KiB
2.9 KiB
Haskell 10
### Exercice 1
- OK
- Sans nous en rendre compte, nous avons utilisés deux fonctions différentes, l'une du type
Int -> Int -> Intet l'autre du typeFloat -> Float -> Float. La surcharge d'opérateur est le fait que deux fonctions essensiellement différentes puissent exister sous un même nom, si il n'y a jamais ambiguité sur laquelle est appelée. - Il est possible de surcharger l'opérateur
+car il a une signification très vague. En mathématique, il peut être l'opération de n'importe quel ensemble ayant une structure de groupe. Un utilisateur créant ses propres objets et leur conférant une telle structure est donc sémantiquement obligé d'utiliser l'opérateur+pour additionner ses objets. - OK
- Le symbole
=>est le symbole de l'implication logique. On peut ici le lire comme «dans les conditions ..., on a ...». - Le resultat de la commande nos dit que «pour tout type
ade classeNum(donc représentant un nombre), la fonction(+)a pour typea -> a -> a.
Exercice 2
- OK
- La classe
Eqcorrespond aux types dont deux objets sont toujours ou bien égaux, ou bien distincts (et que l'on peut le déterminer). Les éléments doivent donc nécessairement posséder une méthode==et/ou/=permetteant de tester l'égalité entre deux objets (respectivenent, l'ingéalité). - De nombreux types étendent cette classe, par exemple
[Int](par l'implicationEq Int => Eq [Int]) ou encore des tuples d'éléments de classe Eq (par exemple(Int, Float). - OK
- Même chose Ici, les éléments de la classe Ord doivent obligatoirement étendre une fonction
comparequi associe deux ordres totaux contraires au type. - OK
- La classe
Showcorrespond aux types qui sont «affichable», par exemple dans le terminal. Les types de cette classe doivent définir une méthodeshowqui à partir d'un objets crée une chaine de carctère que l'on peut afficher pour le représenter. - OK
- La classe
Readcorrespond aux types dont les objets peuvent être créé à partir de leur description donnée parShow. Ils doivent implémenter la méthodereadsPrecqui à une précédence et une chaine de caractères associe un objet décrit par cette chaine. - La classe
Numcorrespond aux type numériques. Ils doivent implémenter les fonctions(+),(-),(*),signumdonnant le signe etfromIntegerpermettant de créer un objet à partir d'un entier. - OK
- La classe
Integralcorrespond aux nombres «intégrables», c'est à dire divisibles par des nombres entiers. Ils doivent implémenter les méthodesquot,rem,div,modettoInteger. - OK
- La classe
Fractionaldécrit les types dont les objets peuvent être divisés par des nombres entiers. Il doivent surcharger la méthode(/)de division, ainsi querecipdonnant l'inverse multiplication et quefromRationalpermettant de créer l'objets à partir d'un rationnel.
Exercice 3
Voir fstfunc.hs
Exercice 4
Voir fstfunc.hs