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.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id 88046BC6B for ; Wed, 10 Oct 2007 10:34:43 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAAN4qDEfLENaMnmdsb2JhbACOSAIBAQcKERg X-IronPort-AV: E=Sophos;i="4.21,253,1188770400"; d="scan'208";a="17787333" Received: from ipmail01.adl2.internode.on.net ([203.16.214.140]) by mail4-smtp-sop.national.inria.fr with ESMTP; 10 Oct 2007 10:34:41 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAACoqDEd5LCRs/2dsb2JhbAAM X-IronPort-AV: E=Sophos;i="4.21,253,1188743400"; d="scan'208";a="207637331" Received: from ppp121-44-36-108.lns10.syd7.internode.on.net (HELO [192.168.1.201]) ([121.44.36.108]) by ipmail01.adl2.internode.on.net with ESMTP; 10 Oct 2007 18:04:35 +0930 Subject: Re: [Caml-list] Functional design for a basic simulation pipe. From: skaller To: Hugo Ferreira Cc: caml-list@yquem.inria.fr In-Reply-To: <470C8199.4080708@inescporto.pt> References: <470C8199.4080708@inescporto.pt> Content-Type: text/plain Date: Wed, 10 Oct 2007 18:34:34 +1000 Message-Id: <1192005274.6285.4.camel@rosella.wigram> Mime-Version: 1.0 X-Mailer: Evolution 2.10.1 Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; 0100,:01 val:01 val:01 sourceforge:01 wrote:01 rec:01 caml-list:01 data:02 exp:02 exp:02 match:02 functional:02 unit:03 unit:03 let:03 On Wed, 2007-10-10 at 08:39 +0100, Hugo Ferreira wrote: > # let exp = gen_events |> gen_states |> analyze_data |> check_stop ;; > val exp : '_a -> unit = > > And execute it so: > > # let start_state = () ;; > val start_state : unit = () > > # let _ = exp start_state ;; > - : unit = () > My question is: how can one design and implement such a "pull pipe" and > solve the problem I have of propagating state back to a previous > function. Assume f : state_t -> state_t option is your state transformer, then let rec go state = match f state with | Some state -> go state | None -> () will do it. -- John Skaller Felix, successor to C++: http://felix.sf.net