On Tuesday, December 10, 2002, 1:26:41 PM, you (mailto:[EMAIL PROTECTED]) wrote:
> On 12/10/2002 4:54 AM, Me wrote:
>> How would one most nicely code what I'll call
>> a lazy pipeline, such that the first result
>> from the final element of the pipeline can
>> appear as soon as the first result has been
>> processed from the intervening elements?
> I belive the short answer is "make sure all elements of your pipeline
> return a lazy list". Exactly how one does this, and the distinction
> between a lazy list and an iterator, I belive is still somwhat up in the
> air.
I think the answer here will be make a lazy list an iterator constructor. This
would also be the case for something like a grep in the pipeline (in effect an
iterator adaptor -- to use a C++ term -- on the previous iterator).
I.e. in a "lazy context", grep would return an object with implementation
something like:
sub GrepIterator.atEnd {
return $inputIt.atEnd;
}
sub GrepIterator.Next(): boolean {
while ($inputIt.Next() and $inputIt.Value() !~ $myPattern) {}
if .atEnd() {
return 0;
}
$myCurrent = $inputIt.Value();
return 1;
}
sub GrepIterator.Value() {
return $myCurrent();
}
(Which of course misses all the edge cases.)
--
Richard
mailto:[EMAIL PROTECTED]