----- Original Message ----- From: "Damian Conway" <[EMAIL PROTECTED]> To: "Perl 6 Language" <[EMAIL PROTECTED]> Sent: Thursday, February 19, 2004 8:29 PM Subject: [perl] The Sort Problem: a definitive ruling
> C<sort> in Perl6 is a global multisub: > > multi sub *sort(Criterion @by: [EMAIL PROTECTED]) {...} > multi sub *sort(Criterion $by: [EMAIL PROTECTED]) {...} > multi sub *sort( : [EMAIL PROTECTED]) {...} > > where: > > type KeyExtractor ::= Code(Any) returns Any; > > type Comparator ::= Code(Any, Any) returns Int; > > type Criterion ::= KeyExtractor > | Comparator > | Pair(KeyExtractor, Comparator) > ; snip > If a key-extractor block returns number, then C<< <=> >> is used to compare > those keys. Otherwise C<cmp> is used. In either case, the keys extracted by > the block are cached within the call to C<sort>, to optimize subsequent > comparisons against the same element. That is, a key-extractor block is only > ever called once for each element being sorted. > > How do you decide whether a key-extractor block returns number? Do you look at the signature, or do you simply evaluate the result of the key-extractor for each element in the unsorted list? For example, what is the result of the following code? sort {$_.key} (1=> 'a', 10 => 'b', 2 =>'c'); There is nothing in the signature of the key-extractor to suggest that all the keys are numbers, but as it turns out they all are. Will the sort end up being numerical or alphabetic? Joe Gottman