Austin Hastings writes:
> > Those are actually:
> >
> > my $b = @m Â+Â 1;
> > my $c = [ map { +$^x } @m ];
>
> Boggle! Why wouldn't that be:
>
> my $c = [ map { $^x Â+Â 1 } @m ];
>
> for the last one?
Whoops. I thought I was preserving his original semantic, but I wasn't.
I had somehow forgotten for that short moment that he wrote two ÂÂs.
The correct line 3 is:
my $c = @m Â+Â 1;
Just like line 2 :-)
> > 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".
>
> You'll have to explain this.
>
> 1- What's the _() for? Don't you mean map { $op(...) } in most of
> those cases?
Remember that &_ is always aliased to the current sub. The reason I
don't call $op directly is to get the implicit recursive behavior.
Otherwise we'd just get a single-dimensional hyper.
> 2- Why does using map {...} @$a make it "infinite depth"? Wouldn't you
> have to use [EMAIL PROTECTED] for that, to force flattening?
No, map takes a code block as its first argument and a slurpy list as
the rest. All I have to do is make $a look like a list. I can do that
with either @$a or *$a (they're exactly the same in this context). I
preferred the conservative for once.
> 3- Assuming that ÂÂ really is 'always infinite depth', how do I make
> it not-always-infinite-depth?
Use map?
To be honest, I'd really feel more comfortable if it were always single
dimensional -- I know precisely what's going on. That is, I'd prefer if
the hyper syntax were a shortcut for a map, plain and simple. But I
suppose it doesn't really matter either way, and making it arbitrary
depth is a bit more useful. Just, um:
my $a = [ 0 ];
my $b = [ $a ];
$a[0] = $b;
$a Â+Â 1;
Will produce a mysterious infinite loop.
Luke