> 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....

Provided each other kind of rx element implemented generate, that
returned all generated strings of length $n, which might be zero.
This would be trivial for most other atoms and ops (I think).

Oh, compositions($a,$b) is a function that returns all lists of length
$b whose elements sum to $a.  Yes, it exists.

I have a couple syntax questions about this if anyone knows the answers:

    $^atom.generate($^n)

I want @rets to be an array of array refs.  Do I have to explicitly
take the reference of that, or does that work by itself?

    zip(@.atoms, $_)

I want the array ref in $_ to be zipped up with @.atoms as if $_ were
a real array.  If this I<is> correct, am I allowed to say:

    zip(@.atoms, @$_)

for documentation?

Also, related to the first question:

    *permutations([EMAIL PROTECTED])

Does that interpolate the returned list from permutations right into
the map's return, a la Perl5?  Do I need the * ?

Wow, 5 unobfuscated friggin lines!  This language is gorgeous!

Luke

Reply via email to