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! _________________________ Racket Developers list: http://lists.racket-lang.org/dev