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 positif y et une valeur d du type

    type context = {name : string ; surname : string ; age : int}
    
    et renvoie une chaîne de caractères de la forme
    In *y* year(s), you'll be *a* years old!
    
    y est la représentation en string de la valeur d et a est l'âge de la personne représentée par d au bout de y 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 que z 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):


Site built with MkDocs and a slightly-modified version of Terminal for MkDocs.
Last update: September 2023