基于第n个元素,然后是第n + 1个元素等对列表进行排序

时间:2014-12-09 13:51:22

标签: sorting lisp common-lisp polynomials

我的基本问题是我有一个表示多项式函数的列表列表,我想根据变量和指数对它们进行排序。

例如,变量'y'之前的变量'x'和变量'x ^ n-1'之前的变量'x ^ n'。

我有一个函数'merge',它带有以下输入:

(merge '((5 x 2)(3 x 2)(10 x 2)(15 x 2)(20 x 2)))

将导致此输出

(53 X 2)

53是系数,x是变量,2是指数。我可以按变量排序先得到所有的a然后是b然后是c等等但是我不知道如何在之后切换指数。

1 个答案:

答案 0 :(得分:3)

如果您有两个排序标准,您可以先按次要排序,然后按主要标准进行稳定排序:

(stable-sort (sort polynomial #'< :key #'third)
             #'string<
             :key #'second)

(您可以将符号与string<进行比较,因为符号是字符串指示符。)

如果您有一个更复杂的定义顺序的功能,请单独定义,例如:

(sort polynomial #'term<)

(defun term< (term0 term1)
  (if (string= (second term0) (second term1))
      (< (third term0) (third term1))
      (string< (second term0) (second term1))))