Lisp排序查询

Aka*_*abu -1 lisp elisp common-lisp

我想对((A 4)(B 2)(C 3)(D 5))进行排序,使得结果为((D 5)(A 4)(C 3)(B 2)).我有正常的排序技术,但它不适用于子列表.

mal*_*per 5

我猜你的问题是你要按每个子列表中的数字排序.排序过程采用名为"key"的关键字参数来指定要在[ 0 ] 上排序的内容.在这种情况下,您希望对每个列表的第二个元素进行排序.如果您提供的列表存储在名为"xs"的变量中,那么您将如何操作:

(sort xs #'> :key #'second)
Run Code Online (Sandbox Code Playgroud)

要小心,因为排序是破坏性的,所以你可能想要的是:

(sort (copy-list xs) #'> :key #'second)
Run Code Online (Sandbox Code Playgroud)

编辑:如果要对元素进行配对,则必须编写单独的过程来执行此操作.基本版本看起来像这样:

(defun pair (xs)
  (if (null xs)
      '()
      (cons (list (first xs) (second xs))
            (pair (rest (rest xs))))))
Run Code Online (Sandbox Code Playgroud)