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) :
dataA=NAA|F-- un arbre avec des Noeuds et des Feuillessizea=letsize'(Nab)k=size'a(\ra->ra+1+size'bk)-- 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 bsize'Fk=k0-- le cas de base, on a une continuation qui attend la taille du sous arbre qu'on traite, ici 0insize'aid-- 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.
[^] # Re: Et OCaml ?
Posté par foobarbazz . En réponse au journal Tous les parsers JSON sont mauvais. Évalué à 1. Dernière modification le 23 octobre 2017 à 18:04.
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) :
Et oui, le style CPS est imbitable :-). C'est pour ça qu'Haskell est fantastique.