• [^] # Re: pour implémenter : enrober dans une fonction

    Posté par (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.

    Ici, le s' que tu passes en argument , il vient d'où ?

    C'est autant un argument qu'un résultat. On peut s’intéresser à un cas très simple :

    blork = let l = 1:l
     in l

    Ici (:) représente l'ajout en tête d'une valeur sur une liste tel que 1:2:[3,4] == [1,2,3,4]

    On peut appeler la fonction blork avec une valeur et voir son comportement :

    blork -- équivalent à
    l -- équivalent à
    1:l -- équivalent à
    1:1:l -- équivalent à
    1:1:1:l

    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.