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 HAA29464; Wed, 19 Nov 2003 07:24:25 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f 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 HAA30981 for ; Wed, 19 Nov 2003 07:24:23 +0100 (MET) Received: from bob.west.spy.net (mail.west.spy.net [66.149.231.226]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id hAJ6OM125141 for ; Wed, 19 Nov 2003 07:24:22 +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 78C8F5BC2; Tue, 18 Nov 2003 22:24:13 -0800 (PST) In-Reply-To: References: 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:24:12 -0800 To: Brian Hurt X-Mailer: Apple Mail (2.606) X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 violates:01 violates:01 snippets:01 recursion:01 overflows:01 recursion:01 cae:99 ocaml:01 lib:01 nov:01 overflow:02 match:02 her:97 stack:02 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Nov 18, 2003, at 22:50, Brian Hurt wrote: > This function is not tail recursive. Basically, if the recursive call > either a) is wrapped in a try block, or b) has it's return value > modified > in any way, the function isn't tail recursive. Your function violates > clause a, the following function violates clause b: > > let append a b = > match a with > | [] -> b > | h :: t -> h :: (append t b) > ;; I guess I don't understand the point of clause a. The try block doesn't seem like it should prevent the optimization. >> dustinti:~/prog/eprojects/snippets/ocaml/lib 586% wc -l numbers >> 4769526 numbers >> # Fileutils.fold_file_lines (fun x y -> y + 1) 0 "numbers";; >> Stack overflow during evaluation (looping recursion?). > > Stack overflows are a classic sign of a function you thought was tail > recursive not being tail recursive. Yes, this file was my test for tail recursion. :) -- 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