Dave Whipp writes:
> Is it possible to "hyper" a hyper operator?
> 
> For example, given:
> 
>   my @m = ( [1,2], [3,4], [5,6] );
> 
>   my $a = @m + 1;
>   my $b = @m +Â 1;
>   my $c = @m +ÂÂ 1;

Those are actually:

    my $b = @m Â+Â 1;
    my $c = [ map { +$^x } @m ];

Hyper markers go on both sides of any binary operator, even if it's not
hypering both sides.  You never see ÂÂ or ÂÂ.  See below.

> is it true that:
> 
>   ok($a == 4);
>   ok($b Â==Â [ 3, 3, 3 ];
>   ok($c ÂÂ==ÂÂ [ [2,3], [4,5], [6,7] ];
> 
> Is there an "infinite depth" hyper operator for operating on trees?

Here's the implementation of hyper operators, from what I know.

    sub *infix_circumfix_meta_operator:ÂÂ ($op, $a, $b) 
    {
        given {
            when $a ~~ Array && $b ~~ Array {
                [ map { _($op, $^x, $^y) } zip($a, $b) ]
            }
            when $a ~~ Array {
                [ map { _($op, $^x, $b) } @$a ]
            }
            when $b ~~ Array {
                [ map { _($op, $a, $^y) } @$b ]
            }
            default {
                $op($a, $b)
            }
        }
    }

So they're always "infinite depth".

Luke

Reply via email to