From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=AWL,SPF_FAIL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 9EEF1BBAF for ; Mon, 19 Jan 2009 18:49:27 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtQHABlMdElQRFuwX2dsb2JhbACTfRUNCgQUviOFcw X-IronPort-AV: E=Sophos;i="4.37,290,1231110000"; d="scan'208";a="19835529" Received: from furbychan.cocan.org ([80.68.91.176]) by mail2-smtp-roc.national.inria.fr with ESMTP; 19 Jan 2009 18:49:27 +0100 Received: from rich by furbychan.cocan.org with local (Exim 4.63) (envelope-from ) id 1LOyFa-0007LZ-2x for caml-list@yquem.inria.fr; Mon, 19 Jan 2009 17:49:26 +0000 Date: Mon, 19 Jan 2009 17:49:25 +0000 To: caml-list@yquem.inria.fr Subject: Re: Visitor in OCaml [was Re: [Caml-list] C++/C# inheritance is bad?] Message-ID: <20090119174925.GA26682@annexia.org> References: <200901171327.19141.jon@ffconsultancy.com> <200901171659.36732.jon@ffconsultancy.com> <871vuz2rm7.fsf_-_@aryx.cs.uiuc.edu> <527cf6bc0901190841l3247ada1kfc86847aac1445d1@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <527cf6bc0901190841l3247ada1kfc86847aac1445d1@mail.gmail.com> User-Agent: Mutt/1.5.13 (2006-08-11) From: Richard Jones X-Spam: no; 0.00; ocaml:01 0100,:01 expr:01 expr:01 camlp:01 camlp:01 2009:98 storm:98 wrote:01 wrote:01 caml-list:01 match:02 inheritance:03 recurse:03 recurse:03 On Mon, Jan 19, 2009 at 05:41:35PM +0100, blue storm wrote: > On 1/19/09, Yoann Padioleau wrote: > > What we want is really give code like > > > > let my_analysis program = > > analyze_all_expressions program (fun expr -> > > match expr with > > | FunCall (e, es) -> do_something() > > | _ -> > > ) > > > > The problem is how to write analyze_all_expressions > > and find_a_way_to_recurse_for_all_the_other_cases. > > You should have a look at the Camlp4 "metaprogramming" facilities : > http://brion.inria.fr/gallium/index.php/Camlp4MapGenerator Exactly what I was going to say. For an example where this camlp4 facility is used, see ocaml-gettext. Rich. -- Richard Jones Red Hat