Jonathan Scott Duff writes:
> On Wed, Nov 19, 2003 at 12:49:21PM -0800, Larry Wall wrote:
> > Sorry, I wasn't being very clear.  It wouldn't be logically attached to
> > the outside of the for, but to the inside of the "confer", or whatever:
> > 
> >     @foo = gather {
> >     for @a -> $x { pick $x if mumble($x) }
> >     DEFAULT { @results }
> >     }
> 
> So ... the only way to get Damians semantics ...
> 
> On Wed, Nov 19, 2003 at 08:01:40AM +1100, Damian Conway wrote:
> >     * vector control structures like C<loop>, C<while>, and C<for> in
> >       a list context return a list of the values of the last statement
> >       each iteration evaluated;
> >
> >     * vector control structures like C<loop>, C<while>, and C<for> in
> >       a scalar context return an integer indicating the number of
> >       times their block was iterated.
> 
> ... is to surround the control structure with a gather { ... }  ??

No.  gather{} is a generator (assuming nothing about its name or
existance whatsoever).  It runs some code, gathering up each pick()
(same assumption) into a list, and returning that.

If I interpret Larry correctly, Damian's semantics won't be going in.
The way you get each of those is:

    my @list = gather {
        while $cond {
            pick do {...}
        }
    }

And similarly for each of the other constructs.

But Damian's semantics will work for simple conditionals, it seems.

One wonders what the return value of a loop will be:

    my $what = do {
        while $cond {...}
    }

Luke

> It seems like "gather" or whatever should be some sort of modifier to
> for/loop/while/until
> 
>       @foo = for : gather @a -> $x { ... }
>       if for : gather @a -> $x { ... } < 3 { ... }    # ick!
>       if : gather for : gather @a -> $x { ... } < 3 { ... }   # ick!**2
>       for : gather @a -> $x { ... } or @results;
>       for : gather @a -> $x { ... } or do { ... }
> 
> Okay, so the syntax isn't great.  I'm just brainstorming.
> 
> Having a gather block just feels wrong to me. It's weird to say that
> control structure X only has a result when placed inside of a special
> block. But maybe it *needs* to be weird.
> 
> > On the other hand, putting the default up front is clearer if the
> > block is long.  Could even be something like:
> > 
> >     @foo = gather is default(@results) {
> >     for @a -> $x { pick $x if mumble($x) }
> >     }
> 
> Hmm.
> 
>       @foo = for :gather,default(@results) @a -> $x { ... }
> 
> -Scott
> -- 
> Jonathan Scott Duff
> [EMAIL PROTECTED]

Reply via email to