Version courte: votre "fold" ne fait pas la même chose
C'est là qu'est l'erreur, cette fonction fait exactement la même chose !
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
Une preuve possible que c'est bien la même chose, nous allons montrer que si f et e sont respectivement une fonction d'accumulation et une graine, alors on peut trouver f' et g' deux fonctions (arguments du fold du journal) telles que quelque soit la liste l :
fold f e l = fold f' g' (encode_en_arbre l)
J'ai commencé une preuve sur la structure du journal, mais celle-ci possède de nombreux défauts
Les arbres ne contiennent que des entiers
Il n'y a pas d'arbre vide
Le deuxième point ne permet pas d'encoder la liste vide, le premier est plus embêtant parce qu'il ne permet pas de retrouver où commence la liste dans l'encodage (tous les noeuds sont identiques).
[^] # Re: Exemple judicieux ?
Posté par Aluminium95 . En réponse à la dépêche Apprendre la programmation fonctionnelle avec le MOOC OCaml. Évalué à 2.
C'est là qu'est l'erreur, cette fonction fait exactement la même chose !
Que fait un fold sur une liste ?
fdans le code du journalgdans le code du journalUne preuve possible que c'est bien la même chose, nous allons montrer que si
fetesont respectivement une fonction d'accumulation et une graine, alors on peut trouverf'etg'deux fonctions (arguments du fold du journal) telles que quelque soit la listel:J'ai commencé une preuve sur la structure du journal, mais celle-ci possède de nombreux défauts
Le deuxième point ne permet pas d'encoder la liste vide, le premier est plus embêtant parce qu'il ne permet pas de retrouver où commence la liste dans l'encodage (tous les noeuds sont identiques).