TP7
Correction des questions 4 et 5
On donne ici plusieurs corrigés possibles pour les questions 4 et 5, les plus délicates. Il s'agit de traduire une fonction d'itération en CPS, puis en un itérateur persistant, et enfin de défonctionaliser le tout pour obtenir un itérateur persistant de premier ordre.
-
v1/rectypes: une première version, à utiliser avec l'option
rectypes
- v1: la même chose en évitant le type trop récursif;
-
v2/rectypes: une deuxième version, à utiliser avec l'option
rectypes
, où on n'obtient pas un code transformé aussi simple à la fin car on est parti d'une fonction d'itération un peu différente; - v2: la même chose en évitant le type trop récursif.
La solution obtenue par transformation de code dans la v1 est classique et assez naturelle: de nombreux programmeurs l'auraient écrite directement. Le propos ici est de montrer que la transformation est systématique, et pourrait vous permettre de "découvrir" des itérateurs persistants de premier ordre auxquels vous n'auriez pas pensé tout de suite.
Pour la question 6, quels itérateurs saurez vous faire directement? lesquels pouvez vous faire en utilisant les transformations vues ci-dessus?