max min にkeyがない件

sortとかfindにはkeyが付き物なのに、なんでmax minは数値にしか対応していないのか。大体全然汎用性がないじゃん、と思った。このくらい無いわけがないが、探すのも面倒なので書いた。

(defun most (sequence predicate &key (key 'identity))
  (let ((res (car sequence))
        (v (funcall key (car sequence))))
    (dolist (s (cdr sequence) res)
      (let ((u (funcall key s)))
        (if (funcall predicate u v)
          (setq res s v u))))))