develooper Front page | perl.perl6.language | Postings from June 2004

Re: Semantics of vector operations (Damian)

Thread Previous | Thread Next
From:
Austin Hastings
Date:
June 14, 2004 13:09
Subject:
Re: Semantics of vector operations (Damian)
Message ID:
20040614200936.93758.qmail@web12308.mail.yahoo.com

--- 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About