> 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