I must say that I don't fully understand your examples. I need to take more time to study them.
But looking at what comprehensions are (I only had a very vague idea), it seems to me that it would be possible to implement them with the gather and take functions of Perl 6. And it should not be too difficult to implement a gather and take functionality in pure Perl 5. I think that Damian has implemented a CPAN module doing that. The only difficulty might be to make that really lazy, but combining an iterator and gather and take might do the trick.
But I'll look further at your modules this week-end (hopefully), this looks interesting.
| [reply] [d/l] [select] |
Actually there are some implementations for Perl 6 gather and take, for example Perl6::GatherTake. It seems that many interesting features are introduced by Perl 6...
Comprehensions generate lists. A comprehension consists of generators which offer operands, guards which behave like assertions on the operands, and an expression for computing an element with "legal" operands. Some languages (such as Erlang, Haskell, .etc) have such feature builtin already.
A comprehension could be derived from some monad comprehension, which implies normal evaluation order among all generators and guards. However, it is beyond the current discussion.
In HOI::Comprehensions, I generate something like a lazy for-loop - an "iterator", which is composition of function calls, is stored as a string, and evaluated each time a "step" is made. It is a little slow since eval is applied on each computation. Perhaps gather & take is a better idea.
| [reply] |