Oui, l’implémentation doit être faite avec attention pour ne pas boucler.
letgsl=((map(/s)l),suml)
Je n'arrive pas à reproduire ta boucle en copiant ton implémentation de g. Es-tu certain que c'est bien celle que tu utilises ?
Voici mon implémentation de g :
gs(x:[])=([x/s],x)-- cas 0gs(x:xs)=let(res,s')=gsxs-- cas 1in((x/s):res,s'+x)
Ici, dans le cas 0, je traite la liste d'un seul élément. Le résultat c'est [x / s] et la somme pour un unique élément c'est x.
Dans le cas 1, je traite la liste de plus d'un élément. Je réalise d'abord un appel récursif g s xs pour récupérer le résultat res sur la sous liste et la somme s' sur la sous liste. Puis je renvois le résultat courant (x / s) : res) et la somme mise à jours s' + x.
[^] # Re: Dernier cas
Posté par Guillaum (site web personnel) . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 2.
Oui, l’implémentation doit être faite avec attention pour ne pas boucler.
Je n'arrive pas à reproduire ta boucle en copiant ton implémentation de
g. Es-tu certain que c'est bien celle que tu utilises ?Voici mon implémentation de
g:Ici, dans le cas 0, je traite la liste d'un seul élément. Le résultat c'est
[x / s]et la somme pour un unique élément c'estx.Dans le cas 1, je traite la liste de plus d'un élément. Je réalise d'abord un appel récursif
g s xspour récupérer le résultatressur la sous liste et la sommes'sur la sous liste. Puis je renvois le résultat courant(x / s) : res)et la somme mise à jourss' + x.