0

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

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

我有一个函数“合并”,它具有以下输入:

(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,等等,但我不知道之后如何切换指数。

4

1 回答 1

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))))
于 2014-12-09T14:44:27.727 回答