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 OAA26007 for caml-red; Mon, 16 Oct 2000 14:17:29 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id JAA22296 for ; Mon, 16 Oct 2000 09:58:03 +0200 (MET DST) Received: from nef.ens.fr (nef.ens.fr [129.199.96.32]) by nez-perce.inria.fr (8.10.0/8.10.0) with ESMTP id e9G7w2T26800 for ; Mon, 16 Oct 2000 09:58:02 +0200 (MET DST) Received: from clipper.ens.fr (clipper-gw.ens.fr [129.199.1.22]) by nef.ens.fr (8.10.1/1.01.28121999) with ESMTP id e9G7w1M85365 ; Mon, 16 Oct 2000 09:58:01 +0200 (CEST) Received: from localhost (frisch@localhost) by clipper.ens.fr (8.9.2/jb-1.1) id JAA28364 ; Mon, 16 Oct 2000 09:58:00 +0200 (MET DST) Date: Mon, 16 Oct 2000 09:58:00 +0200 (MET DST) From: Alain Frisch To: Julian Assange cc: caml-list@inria.fr Subject: Re: list composition functions In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: weis@pauillac.inria.fr On 16 Oct 2000, Julian Assange wrote: > Imagine you have the follow three functions, > > let mirror x = [x;x] > let plus1 x = [x+1] > let none x = [] > > I'm trying to define an operator (>>) that will then operate like so > > (mirror >> mirror >> plus1) [1] > > [2;2;2;2] You could try something like: let build_transformer f x = List.concat (List.map f x) let (>>) t1 t2 x = t1 (t2 x) let mirror = build_transformer (fun x -> [x;x]) let plus1 = build_transformer (fun x -> [x+1]) let none = build_transformer (fun x -> []) (mirror and none are not generalized since their definition is expansive) -- Alain Frisch