(defvar x '((5 . a) (3 . b) (1 . c) (9 . d)))
> X
(loop for i in x minimize (car i))
> 1
我希望得到C,而不是1。我尝试使用values,因为它仍将使用最小化的第一个返回值,但我不知道在这种情况下是否有一种使用multiple-value-bind的方法?
(loop for i in x
minimize (values (car i) (cdr i)) into ans
finally (return ans))
car
时,情况并不太重要,但这会在最佳值上多次调用关键函数(在此情况下为car
)。如果key具有任何副作用或计算成本高昂,则减少这种情况可能是值得的。(当然,并非所有CL函数都是这样。例如,对于sort
的文档表示“不能保证将调用key的次数”。) - Joshua Taylor