• Aucun résultat trouvé

Principes de Programmation TD3

N/A
N/A
Protected

Academic year: 2022

Partager "Principes de Programmation TD3"

Copied!
2
0
0

Texte intégral

(1)

Principes de Programmation TD3

14 mars 2018

Exercice 1 (Monoïdes).

La classeMonoidest définie par :

class Monoid m where mempty :: m

(<>) :: m -> m -> m

Un monoidmdoit vérifier les axiomes suivants :

mempty <> x ~= x

x <> mempty ~= x

(x <> y) <> z ~= x <> (y <> z)

1. Donnez des exemples de monoides.

2. Montrez que[a]est un monoid.1 3. Montrez que(a -> a)est un monoid.2

4. (bonus) Montrez que si mest un monoid, alors(a -> m)est un monoid.

Vous avez le droit d’utiliser la rêgle suivante pour vos réductions : (\x.f x) ~= f

5. (bonus) On définit :3 newtype Dual a = Dual a

instance Monoid a => Monoid (Dual a) where

mempty = Dual mempty

(Dual x) <> (Dual y) = Dual (y <> x) Que faitDual?

1. Uniquement valable sur les listes finies

2. Malheureusement, celui-ci n’est pas implémenté dans Haskell. La raison est qu’il a fallu choisir avec celui de la question suivante dont le type est en conflit.

3. “newtype” est comme “data” mais avec un seul constructeur : c’est un wraper

1

(2)

Exercice 2 (Foldables (Bonus)).

La classefoldableest définie par :

class Foldable struct where

foldr :: (a -> b -> b) -> b -> struct a -> b foldl :: (b -> a -> b) -> b -> struct a -> b foldMap :: Monoid m => (a -> m) -> struct a -> m

Il n’y a pas d’équations explicite entre ces définitions, mais il n’est demandé qu’une fonctions, les autres étant traduites.

1. Écrire foldl,foldret foldMappour les listes.

2. Comment écrire foldMapà partir defoldr? 3. Vérifiez que la traduction est correcte sur les listes.

4. Comment écrire foldMapà partir defoldl? 5. Vérifiez que la traduction est correcte sur les listes.

6. Comment écrire foldrà partir defoldMap?4 7. Vérifiez que la traduction est correcte sur les listes.

8. Comment écrire foldlà partir defoldMap? 9. Vérifiez que la traduction est correcte sur les listes.

10. Montrez queTree est foldable.

11. Montrez queMaybeest foldable.

4. On supposera que(aa)est bien un monoid. Dans Haskell, il est utilisé un wraper qui complexifie les choses.

2

Références

Documents relatifs

Cette doctrine se préoccupait essentiellement de concilier la raison et la foi, en s’appuyant sur la philosophie grecque (en particulier Aristote)] Une des

- La prise de conscience de la réalité dans laquelle ont est plongé, l'amorce d'une analyse de l'école, et tout ça sans discours magistral, sans morale

Il faut vraiment se pencher sur la question en remplissant une grille d’observation de tous les dragons que nous avons, pour connaître le profil type du dragon. Jouons sur les

Evaluation langage d’évocation : Petit poisson blanc de Guido Van Genechten La maîtresse me pose des questions sur une

En B l’action de contact ponctuel entre le plot de maintient et la barrière nommée B de 0 sur 2.. Objectif : déterminer complètement les torseurs des actions mécanique A ,

Bousculé, apostrophé, harcelé, l'auditeur ne sait plus si le bulletin météorologique qui annonce la neige a trait à la journée d'hier ou à celle de demain ; et il se retrouve en

Pour repérer la thèse défendue, il convient tout d'abord de trouver le thème du texte.. On peut ensuite chercher le jugement ou le sentiment du locuteur à propos de

La technologie s'intéresse à tout ce que construit l'homme, en particulier les nombreux objets techniques qui nous entourent et dont nous nous servons tous les jours..