Export to GitHub

clojure - issue #95

max-key and min-key evaluate k multiple times for arguments


Posted on Mar 13, 2009 by Quick Kangaroo

max-key or min-key will evaluate (k value) multiple times for arguments if more than 2 arguments are passed.

This is undesirable if k is expensive to calculate.

Something like the code below would avoid these double calculations (at the price of generating more ephemeral garbage)

(defn max-key "Returns the x for which (k x), a number, is greatest." ([k x] x) ([k x y] (if (> (k x) (k y)) x y)) ([k x y & more] (second (reduce (fn [x y] (if (> (first x) (first y)) x y)) (map #(vector (k %) %) (cons x (cons y more)))))))

Status: New

Labels:
Type-Defect Priority-Low