From: Nicolas C. <war...@fr...> - 2003-06-20 01:57:33
|
I added the complete documention to Enum. (comments are welcome ) While reading the documentation specification, I found a bug. Actually the iter2 , fold2 and others were not correct because of the following f (t.next()) (u.next()) if t.next() was called and then u.next() was raising No_more_elements , we were loosing an element of t. I modified the implementation of theses so now the element is saved and pushed back (using the new "push" function) if needed. But as for map2 (and map2i) this would involve setting up a try .. catch block for every call to next , which has already been tagged as not-so-efficient , I have then temporay removed theses two. Nicolas Cannasse |
From: Alan P. <ap...@re...> - 2003-06-20 02:58:06
|
In article <000701c336cf$1709bc30$2713f9ca@WARP>, Nicolas Cannasse wrote: > I added the complete documention to Enum. (comments are welcome ) > While reading the documentation specification, I found a bug. > Actually the iter2 , fold2 and others were not correct because of the > following > > f (t.next()) (u.next()) > > if t.next() was called and then u.next() was raising No_more_elements , we > were loosing an element of t. I think that the iter2 function only makes sense when used on two enums of the same count. I suggest simply documenting that the behavior is undefined when used on two enums of differing counts. |
From: Nicolas C. <war...@fr...> - 2003-06-20 04:41:05
|
> > I added the complete documention to Enum. (comments are welcome ) > > While reading the documentation specification, I found a bug. > > Actually the iter2 , fold2 and others were not correct because of the > > following > > > > f (t.next()) (u.next()) > > > > if t.next() was called and then u.next() was raising No_more_elements , we > > were loosing an element of t. > > I think that the iter2 function only makes sense when used on two > enums of the same count. I suggest simply documenting that the > behavior is undefined when used on two enums of differing counts. Not exactly. I can think of some samples which are worth the bugfix. You can do iter2 on two enums, and then want to do "something" with the remaining elements. Nicolas Cannasse |
From: John M. S. <sk...@oz...> - 2003-06-20 18:56:11
|
Nicolas Cannasse wrote: > Not exactly. > I can think of some samples which are worth the bugfix. > You can do iter2 on two enums, and then want to do "something" with the > remaining elements. You can do iter2 on 2 enums and raise an exception to get a premature exit, so the enums are both still populated. -- John Max Skaller, mailto:sk...@oz... snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia. voice:61-2-9660-0850 |
From: Brian H. <bri...@ql...> - 2003-06-20 22:05:44
|
On Fri, 20 Jun 2003, Nicolas Cannasse wrote: > I added the complete documention to Enum. (comments are welcome ) > While reading the documentation specification, I found a bug. > Actually the iter2 , fold2 and others were not correct because of the > following > > f (t.next()) (u.next()) > > if t.next() was called and then u.next() was raising No_more_elements , we > were loosing an element of t. > I modified the implementation of theses so now the element is saved and > pushed back (using the new "push" function) if needed. > But as for map2 (and map2i) this would involve setting up a try .. catch > block for every call to next , which has already been tagged as > not-so-efficient , I have then temporay removed theses two. This is one place where has_next would be usefull. It would allow us to implement iter2 like: let iter2 f t u = let rec loop () = if (t.has_next()) && (u.has_next()) then begin f (t.next()) (u.next()); loop () end else () in loop () Brian |
From: John M. S. <sk...@oz...> - 2003-06-21 04:30:43
|
Brian Hurt wrote: > On Fri, 20 Jun 2003, Nicolas Cannasse wrote: > This is one place where has_next would be usefull. But it is a significant change in semantics because it requires one element lookahead. Some data structures cannot support that without side effects, for example reading the next line of a file. -- John Max Skaller, mailto:sk...@oz... snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia. voice:61-2-9660-0850 |
From: Nicolas C. <war...@fr...> - 2003-06-23 02:27:42
|
> > On Fri, 20 Jun 2003, Nicolas Cannasse wrote: > > > This is one place where has_next would be usefull. we have it : Enum.empty : 'a t -> bool > But it is a significant change in semantics because > > it requires one element lookahead. Some data structures > cannot support that without side effects, for example > reading the next line of a file. Enum is handling that for you , but it have a cost since you're needing to do some functional trick. The way iter2 is currently implemented is better thab using empty every time (the element is only pushed back in the enum once). Nicolas Cannasse |