On Wed, Apr 27, 2005 at 06:29:46PM +0200, Thomas Sandlaß wrote:
> Patrick R. Michaud wrote:
> >>my $matches = any( @x_chars ) eq any( @y_chars );
> >>my $match = $matches.pick;
> >
> >Perhaps the easiest way to explain the difficulty here is to note that
> >executing a relational op (i.e. returning a boolean) value on a junction
> >argument returns a junction of boolean values.
> 
> Is that so? Does Perl6 have some fundamental law of junction preservation?
> I would expect $matches to be either false or true---the junction values
> are garbage collected.

I would certainly expect $matches to be false or true if the
expression was invoked in a boolean context, but I'm not certain
it can "auto-collapse" outside of that.  In particular, we know that

    $x = any(0, 1);
    $y = $x + 1;         # $y == any(1, 2)

so a slightly different formulation of this would be:

    $w = any('a', 'b');
    $x = $w eq 'b';      # $x == any(0, 1)
    $y = $x + 1;         # $y == any(1, 2)

I think the assignment to $x above shouldn't be collapsed directly
to a simple false or true value until it's evaluated in a boolean
context.

Pm

Reply via email to