On Sat, Apr 23, 2005 at 10:29:20PM -0700, Larry Wall wrote:
: On Sun, Apr 24, 2005 at 03:02:16PM +1000, Brad Bowman wrote:
: : Hi,
: : 
: : I'm trying to understand the following section in S03:
: : 
: :   S03/"Junctive operators"
: : 
: :   Junctions are specifically unordered.  So if you say
: :     for all(@foo) {...}
: :   it indicates to the compiler that there is no coupling between loop
: :   iterations and they can be run in any order or even in parallel.
: : 
: : Is this a "for" on a one element list, which happens to
: : be a junction, or does the all() flatten?
: 
: No, S03 is probably just wrong there.  Junctions are scalar values, and
: don't flatten in list context.  Maybe we need something like:
: 
:     for =all(@foo) {...}
: 
: to iterate the junction.

For the purposes of S03 it would have been better to use an example
without list context like:

    -> $x {...}(all(@foo))

or maybe

    all(@foo).each:{...}

I think that "given" specifically does not autothread it's block, so

    given any(1,2,3) {...}

matches each case against any(1,2,3).  That is, there is an MMD variant
of "given" that accepts a Junction, which disables autothreading.

Or maybe S03 really just wants to say that

    if all(@foo).each:{...} {...}

is allowed to stop evaluating cases in "random" order when it gets
the first false value back from .each, while

    if any(@foo).each:{...} {...}

is allowed to stop as soon as it gets a true value.

Larry

Reply via email to