[racket-dev] [racket] Feature request: multiple keys in sort
I'd love to see something that at least handles the case of 2 levels
of nesting (if we consider the current situation to be one level of
nesting), absolutely.
Robby
On Mon, Jun 11, 2012 at 2:19 PM, Eli Barzilay <eli at barzilay.org> wrote:
> A few minutes ago, Robby Findler wrote:
>> How about this: until you find the perfect way to do this, we just
>> add two new optional keyword arguments to sort that deal with two
>> levels of key/sorts? eg:
>>
>> (sort lst < #:key first #:key2 second)
>>
>> would mean to sort by < for both keys, treating the first position
>> in the list as the main one and the second as a secondary one. And
>> then we could also have another keyword for specifying a different
>> sorting predicate for the second key, too.
>>
>> That would actually cover all of the cases that I think I've seen in
>> practice.
>
> This looks very limited -- assuming that the direction is the same
> seems fine, but I think that it can be common to have different
> types[*]. Another point is the question of how it'd interact with
> `#:cache-keys?'. And yet another point is that the actual
> implementation (in "racket/private/sort.rkt") is way too "involved" to
> add this kind of functionality, so if I add something like that, I'd
> do that in the keyword wrapper (top of "racket/private/list.rkt") --
> and then I can just as well add the kind of combinator I wrote. (And
> that trivially covers your case.)
>
> So I'll take this as an excited +1 for the idea to add such a
> combinator, possibly enough to just go with the version I wrote
> (right?). And if so, any suggestions for a name for the combinator?
>
> ([*] As it happens, it looks like the improvement to the docs search
> thing that we discussed recently is exactly a case where I'll need to
> sort on two keys -- strings and numbers.)
>
> --
> ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
> http://barzilay.org/ Maze is Life!