--- Damian Conway <damian@conway.org> wrote: > Date: Wed, 28 Jan 2004 12:34:15 +1100 > From: "Damian Conway" <damian@conway.org> Add to Address Book > To: "Language List" <perl6-language@perl.org> >Subject: Re: Semantics of vector operations (Damian) Messages are *not* guaranteed to arrive in the order sent, but boy, this seems harsh! > I have trouble with junctive lvalues because I think they lead to > unexpected/unpredictable behaviour. For example, the "predicate" > associated with a junction is only invoked when that junction is > involved in a boolean test of some kind, so the (hypothetical): > > all($x, $y, $z) = 1; > any($x, $y, $z) = 1; > one($x, $y, $z) = 1; > none($x, $y, $z) = 1; > > would (hypothetically) all do the same thing (i.e. independently > assign 1 to each of the three scalar variables). > That makes the last three versions nothing but obfuscatory in > my view. Perhaps we could consider the junctive lvalues as a sort of implied ?= operation: junction(@list) = value means unless junction(@list) == value { given junction { when 'none' { (@list.grep value) = undef; } when 'any' { for 0 .. random(@list) { @list[random(@list)] = undef; } } when 'one' { @list[random(@list)] = undef; } when 'all' { @list = $(@list) x undef; } } } (which would make for some interesting use cases around 'any', at least ;-) =Austin > > So, at very best, we'd have to restrict lvalue junctions to > conjunctions. > > And there seems to be very little benefit even in that restricted > form, > especially when you consider that: > > all($x, $y, $z) = 1; > all(@foo) = 2; > > are hardly any better than the existing solutions: > > $x = $y = $z = 1; > $_ = 2 for @foo; > > and no better at all than the Perl 6 distributive solutions: > > ($x, $y, $z) �= 1; > @foo �= 2; > > So, on balance, I feel that lvalue junctions are more trouble than > they're worth. > > > Damian > > > > >Thread Previous | Thread Next