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