J'ai crée une liste infinie de 1 avec une expression qui s'auto-référence. L'évaluation paresseuse fait que la liste ne sera jamais évaluée, seul les éléments nécessaires le seront. Si je demande avec take 2 les deux premiers éléments, il peux s’arrêter à 1:1:l sans évaluer la suite.
La liste d'origine est donc parcourue pour créer la 2nde liste, contenant les fonctions non évaluées. Mais pour évaluer les résultats, la 2nde liste devra aussi être parcourue, non ?
Oui. Mais de toute façon tu feras surement un traitement sur cette seconde liste, pour l'afficher par exemple. Les résultats seront évalués à ce moment. Il y a ce site que j'aime beaucoup qui permet d'observer les évaluations.
[^] # Re: pour implémenter : enrober dans une fonction
Posté par Guillaum (site web personnel) . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 4.
Je viens de réaliser une explication d'une heure et j'ai fais un raccourcis clavier à la con sur mon navigateur et j'ai tout perdu... Je me déteste.
C'est autant un argument qu'un résultat. On peut s’intéresser à un cas très simple :
Ici
(:)représente l'ajout en tête d'une valeur sur une liste tel que1:2:[3,4] == [1,2,3,4]On peut appeler la fonction blork avec une valeur et voir son comportement :
J'ai crée une liste infinie de
1avec une expression qui s'auto-référence. L'évaluation paresseuse fait que la liste ne sera jamais évaluée, seul les éléments nécessaires le seront. Si je demande avectake 2les deux premiers éléments, il peux s’arrêter à1:1:lsans évaluer la suite.Oui. Mais de toute façon tu feras surement un traitement sur cette seconde liste, pour l'afficher par exemple. Les résultats seront évalués à ce moment. Il y a ce site que j'aime beaucoup qui permet d'observer les évaluations.