[Le titre n'est pas exact, mais je ne savais pas trop quoi mettre d'autre et je me suis dit que c'était un truc susceptible d'être recherché]
Salut,
J'aimerais définir une fonction permettant de créer des fonctions prenant un nombre d'argument différent. Par exemple, si cette fonction s'appelait f et n'avait pour seule vocation que d'ignorer un nombre variable d'arguments, on aurait :
etc... (On peut supposer que tous les arguments à ignorer sont de même type)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 # f 0 ;; - : unit = () # f 1 x ;; - : unit = ()
Ma motivation initiale était de remplacer des trucs comme :
par quelque chose comme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Format.fprintf out_fmt ... if verbose then Format.fprintf out_fmt ... if very_verbose then Format.fprintf out_fmt ...
Mais comme il y a plein d'autres moyens de faire ça, ce n'est pas vraiment le problème. J'aimerais simplement voir comment ce genre de chose peut être fait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3print ... print_verbose ... print_very_verbose ...
En gros, c'est ce que fait printf, qui prend un format lui indiquant le nombre de strings qui vont suivre. Du coup, j'ai jeté un coup d'oeil à l'implémentation de printf (http://caml.inria.fr/svn/ocaml/trunk/stdlib/printf.ml), seulement elle est rendue compliquée par le fait qu'elle fait quelque chose d'un peu plus sophistiqué que ma fonction... Et surtout j'ai vu qu'elle utilisait pas mal Obj.magic, qui est "interdit à moins de savoir ce qu'on fait" [comme ce n'est pas mon cas...].
Comment pourrait-on faire cela ?
Partager