From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id BAA12554 for caml-redistribution; Thu, 20 Aug 1998 01:50:37 +0200 (MET DST) Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id RAA02485 for ; Wed, 19 Aug 1998 17:54:57 +0200 (MET DST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.8.7/8.8.7) with ESMTP id RAA02231; Wed, 19 Aug 1998 17:54:54 +0200 (MET DST) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id RAA20914; Wed, 19 Aug 1998 17:54:55 +0200 (MET DST) Message-ID: <19980819175455.59002@pauillac.inria.fr> Date: Wed, 19 Aug 1998 17:54:55 +0200 From: Xavier Leroy To: Alain Frisch , caml-list@inria.fr Subject: Re: =?iso-8859-1?Q?Implémentation_de_printf?= References: <199808060831.KAA01652@wanadoo.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mutt 0.89.1 In-Reply-To: <199808060831.KAA01652@wanadoo.fr>; from Alain Frisch on Thu, Aug 06, 1998 at 10:32:45AM +0000 Sender: weis > 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