71Fermer73
PolluxLe 24/06/2007 à 19:12
BookeldOr (./71) :
Pollux (./70) :
je ne vois pas en quoi l'allocation serait gênante confus.gif ce qui est gênant, c'est juste les effets de bord...


Dans un cas comme dans l'autre ça peut être génant ou non (question perf dans un cas et correction dans l'autre), mais il faut que ça soit explicite ce qui n'est pas possible avec le typage ML (mais je n'ai pas regardé en détail, c'était une remarque à priori, ils ont peut être étendu le typage pour ça).Si tu utilises un motif actif défini par quelqu'un d'autre, il faudrait le savoir.

Ben de toute façon y a des tonnes de trucs qui sont gênants s'ils ont "trop" d'effets de bords... Tu t'attends pas à ce qu'une fonction de tri te modifie autre chose que ses arguments par exemple ^^ De même c'est évident qu'un déconstructeur ne doit pas avoir d'effet de bord significatif (à part peut-être toucher à un cache ou autres effets de bords inoffensifs), mais le typage de caml n'a pas vocation à être assez expressif pour dire ce genre de choses...
Question perf bof, je vois pas où est le pb qu'un déconstructeur puisse faire des "calculs" : vérifier si un entier est positif ou si un tableau associatif est non vide, c'est certes un calcul mais c'est quand même bien pratique happy
Pollux (./70) :
par contre ton truc maison est bcp moins général qu'un filtrage normal (et je me demande comment tu comptes t'en servir en pratique ?
subst (PBin Plus (PVal 42) (PTVal (fun x->x0))) (function Bin _ (Val x) -> Val (42 x)) ? c'est un peu crade, tu dois dupliquer le code, tu vas avoir un warning à cause du pattern-matching pas surjectif, etc...)

Pour la généraiité, oui c'était pas le but en l'occurence, c'était juste pour faire des substitutions en fonction d'un critère plus compliqué que l'égalité structurelle sans faire des fonctions ad hoc partout avec du code presque identique.Pour le coup du filtrage dans la fonction de transformation, J'ai une variante avec juste une valeur quand je ne souhaite pas utiliser la valeur à remplacer.

Ouais enfin donc si t'es obligé de faire des hacks à moitié satisfaisants pour éviter les limitations du pattern-matching c'est plutôt un argument en faveur des active patterns tongue
Pollux (./70) :
(fun x->x<>0)

((<>) 0) , tu aimes bien te compliquer la vie cheeky ... tongue

ah non ça c'est équivalent à (fun x->0<>x) tripo