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 GAA28875; Wed, 19 Nov 2003 06:24:17 +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 GAA28408 for ; Wed, 19 Nov 2003 06:24:13 +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 hAJ5O9101671 for ; Wed, 19 Nov 2003 06:24:12 +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 DC4AE5C4C for ; Tue, 18 Nov 2003 21:24:00 -0800 (PST) Mime-Version: 1.0 (Apple Message framework v606) Content-Transfer-Encoding: 7bit Message-Id: <94AC2632-1A50-11D8-A557-000393CB0F1E@spy.net> Content-Type: text/plain; charset=US-ASCII; format=flowed To: Caml Mailing List From: Dustin Sallings Subject: [Caml-list] tail call optimization Date: Tue, 18 Nov 2003 21:24:00 -0800 X-Mailer: Apple Mail (2.606) X-Loop: caml-list@inria.fr X-Spam: no; 0.00; snippets:01 recursion:01 cae:99 ocaml:01 rec:01 lib:01 overflow:02 her:97 stack:02 recursive:03 tail:03 tail:03 iter:03 let:04 let:04 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk I read something on the list about how a function may be tail recursive, but not be compiled with tail call optimization. What kinds of things might cause this? 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; ;; So, I have these other two functions: let operate_on_file f fn = let ch = open_in fn in try let rv = f ch in close_in ch; rv with x -> close_in ch; raise x ;; let fold_file_lines f init_value fn = operate_on_file (fold_lines f init_value) fn ;; I now want to count the lines in a file: 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?). Am I doing something wrong? -- 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