[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
The iterator model is unclear to me.
First, the name "iterator" may not be the best choice.
When I use an "iterator" to iterate through a sequence,
in most languages I change the location of the iterator,
but the identity of the iterator object does not change.
In the proposed API, iterators themselvs are immutable,
and you move to a new position by getting a new iterator.
This is reasonable for a (mostly-)functional language
like Scheme, but perhaps "position" would be a better name?
The specification for iterator-value says it is an error to call
this function when the iterator is at the start *or* at
the end position. If I have a sequence with N elements,
it has N+1 positions before, after, or between elements.
If iterator-value is an error for the two end positions,
that means there are only N-1 values you can access. That is
obviously a problem.
My conclusion is the model is that there are N+2 iterators for
a sequence of N elements. I guess this could be made to work,
but it is different from what I'd expect. (Input ports follow
the N+1 model.) I think there needs to be some motivation for
this model, and a little exploration of the consequences.
Btw: For Java collections, the "value" of am
iterator depends on whether you last moved forwards or backwards.
I.e. the number of states is (I believe) 2*N. Not that I would
advocation such a model!