因此,我知道如何(1 2 3)
按Common Lisp中的升序对列表进行排序。
但是我需要对这个列表进行排序:( (1 2 3) nil 1)
以第3个元素的降序排列。
有没有办法做到这一点?
该sort
函数接受一个谓词,该谓词将用于告诉元素何时在另一个元素之前(请参见hyperspec)。
因此,定义一个函数compare-3rd
:
(defun compare-3rd (a b)
(< (nth 2 a) (nth 2 b)))
并将其用作谓词:
(sort '(( (1 2 3) nil 4)
( (1 2 3) nil 2)
( (1 2 3) nil 3))
'compare-3rd)
==> (((1 2 3) NIL 2) ((1 2 3) NIL 3) ((1 2 3) NIL 4))
当然,如果您想按降序排列,则可以使用>
而不是<
in compare-3rd
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句