Browse thread
[Caml-list] tail call optimization
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Dustin Sallings <dustin@s...> |
| Subject: | Re: [Caml-list] tail call optimization |
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 <dustin@spy.net> | 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