This is like the Iterator Design pattern and this is interesting. Why don't you give a try to see how it grows? Thanks Alain
May be this "memory" could be implemented in another object (and/or Traits?) , allowing several threads to traverse the collection, and add extensibility to the collection framework.
The general idea, inspired from dotnet+smalltalk (I don't know if this fit well with smalltalk patterns, may be total junk and not doable ? -btw it's just a proposition)
Collection>> asQueryable "=> a Queryable Object that would implement first, next, based on a predicate." ^Queryable on: self readStream.
Queryable class >> on: aStream ^self new on: aStream
Queryable>> where: aPredicateBlock self predicate: aPredicateBlock
Queryable>> first self stream reset . ^self next. Queryable>>next [self stream atEnd not and: [ (self predicate value: (current := self stream next)))] whileFalse. ^ self stream atEnd ifTrue: [nil] ifFalse: [self current]. (...)
col := #('a12' 'b12' 'a13' 'a14' 'c23' 'a16') asQueryable where: [:each | each first = $a]. col first. -> 'a12' col next. -> 'a13'
Those dotnet linq patterns are cool, on a dynamic langage like smalltalk with tools like GTInspector + roassal and Moose, wouldn't it be ultra cool ? :)