Il est vrai que j'ai mal présenté la chose. Disons que par rapport à une liste, il n'y a pas besoin de valeur initiale car l'arbre contient déjà tout ce qui lui faut pour faire un reduce via la fonction g. Et le fold que j'ai écrit est une généralisation d'un map+reduce.
letfold_mapfginit=function|[]->failwith"empty list"|x::xs->letrecloopacc=function|[]->acc|hd::tl->loop(gacc(fhd))tlinloop(ginit(fx))xs;;valfold_map:('a->'b)->('c->'b->'c)->'c->'alist->'c=<fun>fold_map(string_of_int)(funss'->Printf.sprintf"(%s + %s)"ss')"1"[2;3];;-:string="((1 + 2) + 3)"(* à comparer avec cette version sur les arbres *)lett=Node(Node(Leaf1,Leaf2),Leaf3)inshow_pt;;-:string="((1 + 2) + 3)"
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.
Il est vrai que j'ai mal présenté la chose. Disons que par rapport à une liste, il n'y a pas besoin de valeur initiale car l'arbre contient déjà tout ce qui lui faut pour faire un reduce via la fonction
g. Et lefoldque j'ai écrit est une généralisation d'un map+reduce.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.