Posté par kantien .
En réponse au journal EDSL et F-algèbres.
Évalué à 1.
Dernière modification le 14 juin 2016 à 08:56.
Je n'ai toujours pas saisi la finalité de la méthode décrite dans le journal, il va falloir que je médite la vidéo et le code donné en lien à la fin pour mieux saisir.
J'ai l'impression qu'il veut faire de la quantification universelle sur du constructeur (forall a.) ce qui s'appelle du higher-kinded polymorphism et en OCaml on a tendance à utiliser le système des modules pour cela.
D'un autre côte, il semblerait que l'objectif soit aussi d'éviter de construire explicitement l'AST du langage cible pour éviter de l'allocation. Si l'on met de côté cette contrainte, on peut obtenir le résultat qu'il souhaite ainsi sans même passer par les modules :
typeexpr=Valofint|Opofexpr*exprletrecfoldfge=matchewith|Vali->fi|Op(e1,e2)->g(foldfge1)(foldfge2);;typeexpr=Valofint|Opofexpr*expr(* oh le joli type de fold ;-) *)valfold:(int->'a)->('a->'a->'a)->expr->'a=<fun>lete=Op(Val1,Op(Val1,Val2));;leteval1=fold(funi->i)(+);;leteval2=fold(funi->i)(-);;leteval3=foldstring_of_int(funab->Printf.sprintf"(%s+%s)"ab);;(* 1 + (1+2) *)eval1e;;-:int=4(* 1 - (1-2) *)eval2e;;-:int=2eval3e;;-:string="(1+(1+2))"
Le terme technique pour la fonction fold est bien celui d'un catamorphisme sur la structure d'AST du langage d'experession, que l'on spécialise selon différentes interprétations pour donner eval1, eval2 et eval3.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: C'est bien la peine !
Posté par kantien . En réponse au journal EDSL et F-algèbres. Évalué à 1. Dernière modification le 14 juin 2016 à 08:56.
Je n'ai toujours pas saisi la finalité de la méthode décrite dans le journal, il va falloir que je médite la vidéo et le code donné en lien à la fin pour mieux saisir.
J'ai l'impression qu'il veut faire de la quantification universelle sur du constructeur (
forall a.) ce qui s'appelle du higher-kinded polymorphism et en OCaml on a tendance à utiliser le système des modules pour cela.D'un autre côte, il semblerait que l'objectif soit aussi d'éviter de construire explicitement l'AST du langage cible pour éviter de l'allocation. Si l'on met de côté cette contrainte, on peut obtenir le résultat qu'il souhaite ainsi sans même passer par les modules :
Le terme technique pour la fonction
foldest bien celui d'un catamorphisme sur la structure d'AST du langage d'experession, que l'on spécialise selon différentes interprétations pour donnereval1,eval2eteval3.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.