Posté par benja .
En réponse au journal EDSL et F-algèbres.
Évalué à 1.
Dernière modification le 13 juin 2016 à 15:07.
Je connais pas ton code, mais (il me semble que) la transformation revient à transformer tous les constructeurs des nodes de ton arbre en un fonctions sur un évaluateur. Par exemple si tu avais:
leteval_string={node=function(v1,v2,v3)->"NodeTerm("^v1^","^v2^","^v3^")"(*pas de récursion, v1-v3 déja évalués! *)leteval_bool={node=function_->true/false}
Chaque match de ton eval devient une fonction différente dans ton évaluateur (ça n'est pas pour rien qu'Oleg l'appelle expr_dict dans son exemple...) Par contre ce journal a utilisé un tuple, mais bon ça n'est pas très pratique à utiliser amha.
Donc en gros tu changes tes constructeurs en closures sur l'évaluateur. Tu construits ton abre en faisant une application partielle des tes fonctions de construction. Donc toutes tes expressions deviennent des fonctions d'un évaluateur vers un résultat, soit le fameux type de ce journal type expr = forall 'a . 'a algebre -> 'a. C'est plus clair ? À toi de nous dire si cette réécriture t'apporte quelque chose de mieux ?
[^] # Re: Dans l'art voluptueuse de ne rien comprendre
Posté par benja . En réponse au journal EDSL et F-algèbres. Évalué à 1. Dernière modification le 13 juin 2016 à 15:07.
Je connais pas ton code, mais (il me semble que) la transformation revient à transformer tous les constructeurs des nodes de ton arbre en un fonctions sur un évaluateur. Par exemple si tu avais:
Tu le changes en
Et tu changes tes evals
comme ceci
Chaque match de ton eval devient une fonction différente dans ton évaluateur (ça n'est pas pour rien qu'Oleg l'appelle expr_dict dans son exemple...) Par contre ce journal a utilisé un tuple, mais bon ça n'est pas très pratique à utiliser amha.
Donc en gros tu changes tes constructeurs en closures sur l'évaluateur. Tu construits ton abre en faisant une application partielle des tes fonctions de construction. Donc toutes tes expressions deviennent des fonctions d'un évaluateur vers un résultat, soit le fameux type de ce journal
type expr = forall 'a . 'a algebre -> 'a. C'est plus clair ? À toi de nous dire si cette réécriture t'apporte quelque chose de mieux ?