On Mon, 04 Jul 2011 12:12:33 +0200, Svante Carl v. Erichsen wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Am 04.07.2011 11:31, schrieb Tamas Papp: >> Why do some CL library functions have :key arguments? >> >> I am asking because I am working on some statistics functions, and the >> design choice came up. Specifically, I can write functions like >> >> (defun quantiles (sequence quantiles &key (key #'identity)) >> ...) >> >> but it is a bit cumbersome. I can make my code simpler by relying on >> calls like >> >> (quantiles (map 'vector key vector) quantiles) >> >> but this conses a bit more. > > Doesn't quantiles just pass the key to sort? Is there some smarter > algorithm I am not aware of right now?
Eg @inproceedings{greenwald2001space, title={Space-efficient online computation of quantile summaries}, author={Greenwald, M. and Khanna, S.}, booktitle={ACM SIGMOD Record}, volume={30}, number={2}, pages={58--66}, year={2001}, organization={ACM} } I am making quantiles a generic function: it should work on objects returned by the method above, and also on vectors. My problem was that (quantiles quantile-summary #(0.25 0.5 0.75) :key something) makes little sense, since the summary is already accumulated. So I will drop key for the moment, and will probably use compiler macros. I also thought of a lazy solution that would just save the function and the object, and traverse once, eg (quantiles (with-key function object) ...) but I need to think about that. > Also, passing the key lets you return the complete objects (or > whatever), not just the keys as in the map call. For example, compare That's a good point, I didn't think of that. Best, Tamas _______________________________________________ pro mailing list pro@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/pro