> From: "Brent Dax" <[EMAIL PROTECTED]>
> Date: Thu, 5 Dec 2002 00:28:52 -0800
> 
> Michael G Schwern:
> # You can do it with a map without much trouble:
> # 
> #     my @indexes = map { /condition/ ? $i++ : () } @stuff;
> 
> Unless I'm mistaken, that won't work, since $i only gets incremented on
> matches.  I think this:
> 
>       my @indexes = map { $i++; /condition/ ? $i : () } @stuff;
> 
> Will work fine, though.

> Or, in the spirit of use-a-foreach-like-a-for (and my favorite WTDI):
> 
>       my @indexes = grep { $stuff[$_] =~ /condition/ } 0..$#stuff;

Fantastic!  One that doesn't use a variable temporary variable.  We
all write too quickly to catch errors like the one above.  Except
yours seems to be clean.  Anyway---back to relevant topics.

> As you might guess, I'm a (not very vocal) proponent of adding a way to
> get at a foreach's (or map's or grep's) current index.  (Hmm, can this
> be done with XS?  Must research...)

In Perl 5 that would be nice.  In Perl 6 though, it is not necessary:

    for zip(@array, 0..Inf) -> $v, $c {
        ...
    }

That parallel iteration is just getting more and more useful (although
this is a particularly ancient case).  We've already been through A4,
but the idea of C<for> has changed since then (I think).  I don't like
C<zip> as a name for such a thing.

    for interleave(@array, 0..Inf) {...}
Too long.
    for slice   (@array, 0..Inf) {...}
    for collate (@array, 0..Inf) {...}
    for parallel(@array, 0..Inf) {...}
    for braid   (@array, 0..Inf) {...}
    for thread  (@array, 0..Inf) {...}
    for weave   (@array, 0..Inf) {...}

The sequential list generator would almost certainly be C<each>, if we
need one at all.

    for @array {...}
    for each @array: {...}
    for each(@array, @barry) {...}
    for @array, @barry {...}           # Is this legal?

That last one might iterate through the arrays themselves, not their
elements, which would be useful on the blue moon nights.  ??

Or is it still:

    for @array ; 0..Inf -> $v ; $c { ... }

I hope not.

Not to delay the next Apocalypse, or anything <:(  

Luke

Reply via email to