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 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 <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