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_age
qui prend comme arguments un entier positify
et une valeurd
du 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!
string
de la valeurd
et a est l'âge de la personne représentée pard
au bout dey
anné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_year
qui 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_after
qui calcule la somme de tous les éléments de cet environnement partagé puis la somme de l'environnement modifiée pour quez
soit é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 1 décembre 2023, 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):