> Luke Palmer <[EMAIL PROTECTED]> writes:
>
> >> On Thu, Apr 03, 2003 at 07:29:37AM -0800, Austin Hastings wrote:
> >> >This has been alluded to before.
> >> >
> >> >What would /A*B*/ produce?
> >> >
> >> >Because if you were just processing the rex, I think you'd have to
> >> >finish generating all possibilities of A* before you began iterating
> >> >over B*...
> >>
> >> The "proper" way would be to first produce all possibilities of length n
> >> before giving any possibility of length n+1.
> >>
> >> ''
> >> 'A'
> >> 'B'
> >> 'AA'
> >> 'AB'
> >> 'BB'
> >> 'AAA'
> >> 'AAB'
> >> ...
> >>
> >> I haven't spent a milisecond of working out whether that's feasible to
> >> implement, but from a theoretical POV it seems like the solution.
> >
> > Well, I'm not certain there is really a "proper" way. But sure, your
> > way is doable.
> >
> > use Permutations <<permutations compositions>>;
> >
> > # Generate all strings of length $n
> > method Rule::Group::generate(Int $n) { # Type sprinkles :)
> > compositions($n, [EMAIL PROTECTED]) ==> map {
> > my @rets = map {
> > $^atom.generate($^n)
> > } zip(@.atoms, $_);
> > *permutations([EMAIL PROTECTED])
> > }
> > }
> >
> > How's that for A4 and A6 in a nutshell, implementing an A5 conept? :)
> > I hope I got it right....
>
> For bonus points:
>
> method Rule::Group::generate_all($self:) {
> for 1 .. Inf -> $i {
> yield $_ for $self.generate($i);
> }
> }
>
> Hmm... I wonder if there's a way of making the basic 'generate' method
> lazy too.
Well, it might be already, based on some ideas that have come up here
before (for instance, map being lazy and generating a lazy list
when it can). If compositions is lazy, then generate would be too.
Or, I want it to work that way, at least. :)
Luke