Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] tail call optimization
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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