On Mon, 15 Jul 2002, Karl Glazebrook wrote:
> In Apocalypse 2 Larry Wall wrote:
>
> > RFC 082: Arrays: Apply operators element-wise in a list context
> >
> > APL, here we come... :-)
> >
> > This is by far the most difficult of these RFCs to decide, so I'm going
> > to be doing a lot of thinking out loud here. This is research--or at
> > least, a search. Please bear with me.
> <snip>
> > So the resolution of this is that the unmarked forms of operators will
> > force scalar context as they do in Perl 5, and we'll need a special
> > marker that says an operator is to be auto-iterated. That special
> > marker turns out to be an uparrow, with a tip o' the hat to
> > higher-order functions. That is, the hyper-operator:
> >
> >
> > @a ^* @b
>
> Excuse me, but *bletch*, - this is as ugly as sin. Especially when we
> get into
> complex formulae. Imagine:
>
> @solution = (^-@b + sqrt(@b^**2 ^+ 4^*@a^*@c) ) ^/ (2^*@a);
That would not be very pretty, indeed. It would also not be very
efficient. (BTW, its b**2 - 4ac, not + :) A more efficient, pretty,
and clear way would be like this:
for @a; @b; @c; @s is rw ->
$a; $b; $c; $s {
$s = (-$b + sqrt($b**2 - 4*$a*$c)) / (2*$a)
}
> What is wrong with using @a * @b - the only reason I can think is to
> preserve
> a backward compatibility which is not needed?
> ...
> Why do we need to preserve @x as array length when you are proposing
> @x.length ?
I see your point. I went through a couple of my larger perl programs, and
the only time I used arrays in numeric context was in the C-style for
loop.
I think the idea is the red flag. If you have a 10000-element array, you
wouldn't think a line like:
$end = @array - 1
is going to take a long time and stick a big reference into $end. And a
lot of Perl 5 programmers would do that. I guess this is back on
backwards-compatibility. But do you see my point?
I wouldn't mind if this proposal was accepted, but I also think the hyper
operator syntax is nice. At least for what I'm doing, in which it's
usually Yet Another shorthand for a C<foreach> (or now just C<for>) loop.
> If I was forced to write vector code like this I *WILL* give up on perl,
> and resort to Numerical
> Python or IDL instead.
Well, I guess that will be your loss... especially when Python is
assimilated by Perl. You will have nowhere to go :)
> appalled,
>
> Karl Glazebrook
attempting unappalment,
Luke