Version française
Home     About     Download     Resources     Contact us    
Browse thread
Implémentation_de_printf
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <Xavier.Leroy@i...>
Subject: Re: Implémentation_de_printf
> je cherche à créer une fonction du genre :
> let affiche format arg = mon_affichage (sprintf format arg);;
> mais qui accepte des formats avec plusieurs paramètres. Est-ce
> possible (j'utilise Caml Light 0.7).

Non, ce n'est pas possible.  Étant donné la manière dont les fonctions
*printf consomment leurs arguments, on peut définir une fonction qui
fait quelque chose avant d'appeler printf:

    let affiche format = print_string "**mon prefixe**"; printf format

mais il n'est pas possible de reprendre la main après que printf a
consommé ses arguments.

> D'autre part, en consultant le code source de printf (version 0.6),
> il me vient quelques questions : que sont les fonctions magic, 
> is_block, repr, obj_tag ?

Des primitives de très bas niveau permettant d'accéder directement aux
représentations des structures de données Caml et de contourner le
typage statique strict.  Les utiliser nécessite une compréhension en
profondeur du runtime et du compilateur Caml.  Je ne saurais trop vous
dissuader de vous en servir!

> Est-il possible de créer soi même une fonction du style printf
> (ie:  nombre et type d'arguments variable suivant la valeur d'un 
> paramètre) ?

En restant dans la partie "bien typée" du langage, c'est difficile.
Cependant, vous pouvez regarder le printf d'Olivier Danvy
("Functional Unparsing", http://www.brics.dk/RS/98/Ref/BRICS-RS-98-Ref/BRICS-RS-98-Ref.html#BRICS-RS-98-12).

- Xavier Leroy