--- Paul <[EMAIL PROTECTED]> wrote:
> 
> --- Austin Hastings <[EMAIL PROTECTED]> wrote:
> > Likewise, I could argue that it be called C<=:\> (the "disgruntled
> > muppet" operator?) since that reflects the "equals, under
> reference"
> > symbology. But that's yucky.
> 
> Shouldn't that be ==:/ (maybe the "severely startled muppet"
> operator?
> lol...) A single = would be assignment, but I have no idea how
> adverbial modification would affect that. Exactly what *would*
> adverbial assignment be? Would
>   $a =:\ $b
> be like 
>   $a = \$b;
>  
> > sub budgetwise(Int $a, Int $b){-1_000_000 <= $a - $b <= 1_000_000;}
> > my Int $log_rolling, Int $pork_barrel;
> > $log_rolling = random() * 1.0E9;
> > $pork_barrel = random() * 1.0E9;
> > if ($log_rolling eq:budgetwise $pork_barrel)
> >   print "They cost the same, give or take a million dollars.";
> 
> Is that saying to make budgetwise the comparison operator at the same
> precedence as eq? 

Actually, what I think I'm saying in this case is "replace the do()
behavior of infix:eq with this sub."

Which has kind of startling effects, because then you can also say
things like this:

sub uniquely(@dest is rw, @src)
{
  my $last = @src[0] ~ "1";

  for @src -> $s
  {
    @dest.push($last = $s) unless $s == $last;
  }
}

my @a = <>;             # Read all lines from a file.
my @b =:uniquely @a;    # Eat the duplicates


> 
> Wouldn't that be much like saying
> 
>   my sub infix:um (Int $a, Int $b) is equiv(&infix:eq) { # c.f.A6
> p.11
>      -1_000_000 <= $a - $b <= 1_000_000; }
>   if ($log_rolling um $pork_barrel) # etc

Looks right to me, modulo type-casting behavior -- I think yours does
typechecking and blows up if the types are misaligned enough, while
mine finds the right infix:= operator, and replaces the actual
mechanics. (Frankly, I'm not sure what the right behavior of mine is.
It may be better to think of it as "temporizing" the infix:= operator
for one expression only. More thought required.)

> So how does one get a ref in P6 that won't dereference itself???

No idea. I thought that the auto-da-fe^Wautodereference behavior was
intended to make "loose references" impossible -- that is, you have to
treat a reference object as an object, always. (Which just means more
backslashes, I guess.)

> The we could say 
> 
>   my sub infix:embodies ($a,$b) is equiv(&infix:eq) { 
>      $a.ref eq $b.ref  # unless eq deref's even here.....
>   }

Maybe you just have to say C<\$a eq \$b> ?

> 
>   if ($x embodies $y) {
>       print "X and Y refer to the same entity\n";
>   } 
> 

=Austin

Reply via email to