我的基本问题是我有一个表示多项式函数的列表列表,我想根据变量和指数对它们进行排序。
例如,变量“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,等等,但我不知道之后如何切换指数。
我的基本问题是我有一个表示多项式函数的列表列表,我想根据变量和指数对它们进行排序。
例如,变量“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,等等,但我不知道之后如何切换指数。
如果您有两个要排序的标准,您可以先按次要标准排序,然后按主要标准稳定排序:
(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))))