Exercise 0
-
Problème 0: Définir une monade Reader qui donne accès à une seule valeur entière en tant qu'environnement partagé.
-
Problème 1: Utilisez la monade que vous avez définie ci-dessus pour calculer une fonction simple de l'entier partagé, par exemple la somme de son carré et de son cube.
Exercise 1
-
Problème 0: Implémentez la monade ContextReader que nous avons vue pendant le CM.
-
Problème 1: Définissez une fonction monadique
tell_agequi prend comme arguments un entier positifyet une valeurddu typeet renvoie une chaîne de caractères de la formetype context = {name : string ; surname : string ; age : int}où y est la représentation enIn *y* year(s), you'll be *a* years old!stringde la valeurdet a est l'âge de la personne représentée pardau bout deyannées à partir de maintenant. Par exemple :# tell_age 1 {name = "Alex"; surname = "Singh"; age = 29};; - : string = "In 1 year(s) you'll be 30 years old!" -
Problème 2: Composez cette fonction avec la fonction greet pour obtenir une fonction
greet_and_tell_age_next_yearqui salue qui salue la personne et lui indique son âge pour l'année prochaine. Par exemple :# greet_and_tell_age_next_year {name = "Alex"; surname = "Singh"; age = 29};; Hi Alex Singh, you are : 29 years old. In 1 year(s) you'll be 30! - : unit = ()
Exercise 2
- Problème 0: Définissez une monade Reader qui permet d'accéder à une valeur du type suivant :
type three_vars = {x : int ; y : int ; z : int}
-
Problème 0: Implémentez des fonctions monadiques pour accéder à chacun des éléments de l'enregistrement ci-dessus
-
Problème 1: Utilisez ces fonctions pour calculer la somme de tous les éléments de cet environnement partagé.
Exercise 3
-
Problème 0: Passez de la monade précédente de l'exercice 2 à une monade State qui permet d'accéder à des valeurs du même type
three_vars: -
Problème 0: Implémentez des fonctions monadiques pour accéder à chacun des éléments de l'enregistrement ci-dessus
-
Problème 1: Utilisez ces fonctions pour implémenter une fonction
sum_before_afterqui calcule la somme de tous les éléments de cet environnement partagé puis la somme de l'environnement modifiée pour quezsoit égal à123, et renvoie un tuple contenant les deux. Par example:# runState sum_before_after {x = 10; y = 20; z = 30};; - : (int * int) * s = ((60, 153), {x = 10; y = 20; z = 123})
Devoir à rendre avant le 3 décembre 2024, 23h59, heure de Paris:
- Problem 0: En utilisant une monade State qui donne accès à une Map contenant des paires d'un nom de variable (une chaîne) et d'une valeur (un entier positif), étendez votre solution au devoir de la séance 1 de manière à ce qu'elle puisse gérer un nombre arbitraire de variables personnalisées qui peuvent être définies à n'importe quelle valeur entière positive.
Par exemple, le morceau de code suivant définit
trois variables a,b,c avec des valeurs initiales 10,20,30 et ensuite
les additionne:
Expression analysée:
Expression évaluée (en supposant un contexte initial vide):