> 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

Reply via email to