lisp中的自定义排序

时间:2016-12-11 12:57:49

标签: list lisp common-lisp polynomials

我有一个代表这样的单项式的结构:

    (M coefficient monomial-degree vars)

所以下面的单项式3 * x * y ^ 2应该表示如下:

    (M 3 3 ((V 1 X) (V 2 Y)))

现在,我有一个具有这种结构的单项式列表,例如:

    ((M 3 3 ((V 1 X) (V 2 Y))) (M 2 1 ((V 1 X))))

我要做的是按照以下规则对单项式列表进行排序:
1-sort单项式首先是通过增加单项度

2 - 如果两个单项式具有相同的单项度,则按它们的变量对它们进行排序。这意味着首先考虑他们的变量并按字母顺序对它们进行排序,如果它们具有相同的变量,我应该通过考虑它们的变量程度对它们进行排序,并用一个有序的顺序对它们进行排序。

因此,考虑到上面所示的例子,结果应为:

    ((M 2 1 ((V 1 X))) (M 3 3 ((V 1 X) (V 2 Y))))

现在让我们考虑具有相同变量/度数的三个单项式:

    ((M 2 2 ((V 1 A) (V 1 C))) (M 3 2 ((V 2 A))) (M 1 2 ((V 1 A) (V 1 B))))

结果应为:

    ((M 1 2 ((V 1 A) (V 1 B))) (M 2 2 ((V 1 A) (V 1 C))) (M 3 2 ((V 1 A))))

所以在第一种情况下,我使用像这样的排序函数来按单项式进行排序:

    (sort (copy-seq lista) #'<  :key #'third)

但我不确定如何对单项式具有相同的单项度进行排序。 我考虑过自定义排序功能,但我不确定应该如何实现它。

0 个答案:

没有答案