• [^] # Re: Et OCaml ?

    Posté par . En réponse au journal Tous les parsers JSON sont mauvais. Évalué à 1. Dernière modification le 23 octobre 2017 à 18:04.

    Pour rendre mes fonctions tail-rec, j'ajoutais juste un accumulateur dans mes arguments. Mais ca n'est pas toujours possible. CPS permet de repousser un peu les limites, c'est ca?

    Oui, c'est ça. C'est un peu ce que fait Haskell spontanément. L'idée, c'est qu'au lieux de faire grossir ton calcul sur la pile, avant de l'évaluer, tu le fais grossir sur le tas.

    En haskell parce que c'est plus lisible (pour moi) :

    data A = N A A | F -- un arbre avec des Noeuds et des Feuilles
    size a = let size' (N a b) k = size' a (\ra -> ra + 1 + size' b k)
     -- c'est là qu'est la magie, au lieu d'empiler le second appel pour l'arbre droit, on va le rajouter dans la pile
     -- dans une continuation, ça veut dire : ok, d'abord je fais l'appel sur sous arbre gauche, et quand j'aurais le resultat ra, je pourrais m'occuper du b
     size' F k = k 0 -- le cas de base, on a une continuation qui attend la taille du sous arbre qu'on traite, ici 0
     in size' a id -- initialisation, on veut la taille de l'arbre a, qu'on va renvoyer tel quel

    Mais quand je vois les exemples wikipedia, j'ai l'impression que ca rend la lecture quand mem plus compliquee. Ca ne vaut pas le coup de repasser au style imperatif dans ces cas la?

    Et oui, le style CPS est imbitable :-). C'est pour ça qu'Haskell est fantastique.