Aaron Crane writes:
> Luke Palmer wrote:
> > Any other ideas?
>
> How about something like this, modulo any errors in my Perl 6 syntax?
>
> sub sort(?&cmp = &infix:cmp, +$key, +$desc, [EMAIL PROTECTED]) { ... }
>
> I think that allows all of these:
>
> # P5: @sorted = sort @unsorted;
> @sorted = sort @unsorted;
>
> The simplest case is the same as the Perl 5, which seems a pleasant feature.
This is a feature that, IMO, we can not do without. I still do things
like:
print "$_: %hash{$_}" for sort keys %hash;
All the time, and I don't want to give that up for some "clearer"
syntax, as there is no such thing.
>
> # P5: @sorted = sort { $a <=> $b } @unsorted;
> @sorted = sort { $^a <=> $^b } @unsorted; # or:
> @sorted = sort &infix:<=> <== @unsorted;
>
> This also seems reasonable.
>
> # P5: @sorted = sort { $a->foo('bar')->compute <=> $b->foo('bar')->compute }
> # @unsorted
> # or: @sorted = map { $_->[1] }
> # sort { $a->[0] <=? $b->[0] }
> # map { [ $_->foo('bar')->compute, $_ ] }
> # @unsorted
> @sorted = sort &infix:<=>, key => { $_.foo('bar').compute } <== @unsorted;
Ok, I have to say, that's pretty good. Er, really good. I like it a
lot.
> I think my suggestion wins big here. We've only had to specify how to
> extract the key, and sort itself takes care of everything else. And it looks
> to me like this sort function has enough information about the programmer's
> intent for it to optimise in all sorts of exciting ways -- it should be able
> to do the equivalent of the GRT internally, for example.
>
> Just for kicks, this one demonstrates all the features. It's the same as
> before, but in descending order:
>
> @unsorted
> ==> sort &infix:<=>, desc => 1, key => { $_.foo('bar').compute }
> ==> @sorted;
>
> What problems can anyone spot with this suggestion?
I don't like the C<desc> flag. But I can't, at the moment, think of any
way around it short of:
@unsorted
==> sort { $^b <=> $^a }, key => { .foo('bar').compute }
==> @sorted
Which people have made pretty clear that they don't like.
Oh, by the way, your Perl 6 syntax is immaculate. Bravo :-)
Luke