From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id HAA28767; Wed, 19 Nov 2003 07:09:01 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f 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 HAA30541 for ; Wed, 19 Nov 2003 07:09:00 +0100 (MET) Received: from bob.west.spy.net (mail.west.spy.net [66.149.231.226]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id hAJ68w104702 for ; Wed, 19 Nov 2003 07:08:59 +0100 (MET) Received: from [192.168.1.50] (dustinti.west.spy.net [192.168.1.50]) by bob.west.spy.net (Postfix) with ESMTP id 8769B6699; Tue, 18 Nov 2003 22:07:26 -0800 (PST) In-Reply-To: <3FBB0247.2000401@cs.caltech.edu> References: <94AC2632-1A50-11D8-A557-000393CB0F1E@spy.net> <3FBB0247.2000401@cs.caltech.edu> Mime-Version: 1.0 (Apple Message framework v606) Content-Type: text/plain; charset=US-ASCII; format=flowed Message-Id: Content-Transfer-Encoding: 7bit Cc: Caml Mailing List From: Dustin Sallings Subject: Re: [Caml-list] tail call optimization Date: Tue, 18 Nov 2003 22:07:25 -0800 To: Aleksey Nogin X-Mailer: Apple Mail (2.606) X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 cae:99 rec:01 rec:01 nov:01 match:02 match:02 her:97 wrote:03 wrote:03 recursive:03 recursive:03 tail:03 tail:03 iter:03 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Nov 18, 2003, at 21:40, Aleksey Nogin wrote: > On 18.11.2003 21:24, Dustin Sallings wrote: > >> Specifically, I've got an ``iter_lines'' function I'd like to >> turn into a ``fold_lines'' function that looks something like this (a >> few different functions for different things): >> let rec fold_lines f init_value ch = >> try >> let v = f (input_line ch) init_value in >> fold_lines f v ch >> with End_of_file -> init_value; > > My guess is that because the recursive call is inside the "try", the > function is not really tail recursive. > > May be the following will work: > > let rec fold_lines f init_value ch = > match > try > Some (f (input_line ch) init_value) > with End_of_file -> None > with > Some v -> fold_lines f v ch > | None -> init_value Well, this does work, but I don't really like it. How expensive is the match? It seems to me that the try call shouldn't be relevant since the return value comes from the bottom of it. -- SPY My girlfriend asked me which one I like better. pub 1024/3CAE01D5 1994/11/03 Dustin Sallings | Key fingerprint = 87 02 57 08 02 D0 DA D6 C8 0F 3E 65 51 98 D8 BE L_______________________ I hope the answer won't upset her. ____________ ------------------- 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