[racket-dev] [racket] Feature request: multiple keys in sort

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Mon Jun 11 15:28:23 EDT 2012

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.


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!

Posted on the dev mailing list.