• [^] # Re: Exemple judicieux ?

    Posté par . En réponse à la dépêche Apprendre la programmation fonctionnelle avec le MOOC OCaml. Évalué à 1. Dernière modification le 16 septembre 2016 à 23:58.

    Mon propos est qu'il est d'usage d'appeler la première version fold. Si j'avais l'habitude de sommer les feuilles de mon arbres avec fold (+) zero tree vous me demandez maintenant de l'écrire zero + (fold (+) (fun x -> x) tree). Alors ok ça fait la même chose mais en l'utilisant différemment. Je dis simplement que je trouves cela perturbant...

    Non, tu n'a toujours pas compris. Il n'y a pas de zero dans le cas des arbres ! C'est la fonction f qui joue le rôle de cette constante que l'on fournit dans le cas des fold sur les listes : c'est bien plus fonctionnel que ce à quoi tu veux réduire le fold. Tu cherches à le réduire au cas où la graine est une constante, et on te dit que comme on est dans un langage fonctionnel cela peut aussi être une fonction. C'est pour cela que c'est une généralisation du cas sur les listes.

    Une liste à pour type : type 'a list = Nil | Cons of 'a * 'a list, ce sont des listes chaînées. Quand on parcourt une liste on termine toujours sur Nil et c'est la qu'on utilise la graine. Dans un langage impératif ce serait la gestion du cas où l'on tombe sur un pointeur null. Dans le cas des arbres, en bout de parcours on tombe sur une feuille qui contient un int et alors on applique une fonction. Le principe est identique mais généralisé.

    Comme te l'as dit Aluminium95 :

    Que fait un fold sur une liste ?

    • Il commence avec une graine : le paramètre f dans le code du journal
    • Il accumule des valeurs : le paramètre g dans le code du journal

    Il n'y a que toi que cela perturbe, tu es la première personne que je rencontre qui voit là un problème.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.