Browse thread
[Caml-list] kprintf with user formatters
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2004-07-16 (07:13) |
From: | Jean-Christophe Filliatre <Jean-Christophe.Filliatre@l...> |
Subject: | Re: [Caml-list] kprintf with user formatters |
Pierre Weis writes: > > If I understand properly: > > - you want to skip the runtime time penalty of formatting the > arguments to string before discarding the result, > - you even want not to parse the format string, > - ideally you also want NOT TO EVALUATE the reminding arguments of > your printf call ? > > Hmm, this sounds extremely lazy to me; so this suggests thunk > programming; hey, we have that in the language, so let's go! > > let log level thunk = > if may_log level then thunk ();; > > ... > > log 2 (fun () -> > eprintf "Argument 1 is hard to compute %d\n" (ackermann x x)) I also use the same kind of trick in practice, with a little refinement to avoid building the closure. I introduce higher-order functions such as val if_debug : ('a -> unit) -> 'a -> unit which behaves like application when the debug flag is on (and does nothing otherwise). Then you can simply write ... if_debug eprintf "this is a message"; ... I even introduce variants for functions with more than one argument to be able to write stuff like ... if_debug3 eprintf "syntax tree is %a@." print_tree t; ... without addition of parentheses. I still find this very convenient and not obtrusive as far as style is concerned. Hope this helps, -- Jean-Christophe Filliâtre (http://www.lri.fr/~filliatr) ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners