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.
[^] # Re: Exemple judicieux ?
Posté par kantien . 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.
Non, tu n'a toujours pas compris. Il n'y a pas de
zerodans le cas des arbres ! C'est la fonctionfqui joue le rôle de cette constante que l'on fournit dans le cas desfoldsur les listes : c'est bien plus fonctionnel que ce à quoi tu veux réduire lefold. 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 surNilet 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 pointeurnull. Dans le cas des arbres, en bout de parcours on tombe sur une feuille qui contient unintet alors on applique une fonction. Le principe est identique mais généralisé.Comme te l'as dit Aluminium95 :
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.