develooper Front page | perl.perl6.language | Postings from February 2004

The Sort Problem

Thread Next
From:
Luke Palmer
Date:
February 11, 2004 19:11
Subject:
The Sort Problem
Message ID:
20040212031134.GA16797@babylonia.flatirons.org
I've been thinking about this problem which comes up in my code a lot:

    @sorted = sort { $^a.foo('bar').compute <=> $^b.foo('bar').compute }
                @unsorted;

Often the expressions on each side are even longer than that.  But one
thing remains:  both sides are exactly the same, substitute a $^b for a
$^a.

I can see a couple less-than-desirable ways around this redundancy:

    @sorted = sort { infix:<=>( *($^a, $^b)ยป.foo('bar').compute ) }
                @unsorted;

Which doesn't work if .compute returns a list... not to mention its
horrible ugliness.  Another is to define a variant of sort (haven't had
much practice with A6 material recently; here we go!):

    multi sub sort (&block($) = { $_ } : *@data) {
        sort { block($^a) cmp block($^b) } @data;
    }

    @sorted = sort { .foo('bar').compute } @unsorted;

Which has the disadvantage of forcing you to use C<cmp> and forcing an
ascending sort.

Any other ideas?  Is a more general solution necessary?

Luke

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About