Okay,
Now that I've largely accepted junctions (except implicit autothreading, which is Bad.), I see some corners that need to be poked at in terms of how they fit into the language as a whole.
All of these examples assume an appropriate level of "use junctions;" is in effect.
- Can junctions be used as array/hash subscripts?
In an rvalue context, this makes sense, in that you can simply return a junction of the deferences. But in an lvalue context, this gets dubious for everything except all() junctions. Consider:
@x = 1..10; @x[any(4,3)] = 7;
What does @x look like now?
@x[all(4,3,2)] = 7;
makes sense, as long as it means:
@x[4,3,2] »=« 7;
I don't want to even think about what:
@x[none(1,2)] = 7;
does.
- Can you have non-scalar junctions?
As the discussions surrounding C< .. > demonstrated, it's not that hard for someone to create a situation where a junction of lists might come into existence. But let's consider something a step beyond.
%x = (a => 1, b => 2, c => 3) | (d => 4, e => 5, f => 6); @y = %x.keys;
Does this explode, or does @y have something useful in it now?
Before dismissing the concept completely, it's perfectly possible to create something much like a junctive hash via references:
%x = (a => 1, b => 2, c => 3); %y = (d => 4, e => 5, f => 6); $z = one(\%x, \%y); @w = $z.keys;
- What does it mean to sort a list of junctions?
@x = any(1,6), all(2,5), one(3,4); @x = @x.sort;
Does sort() carp on junctions, or is it just one of the weird things you have to live with if you're playing with junctions?
-- Rod Adams