Сортировать полиномы Common Lisp

Я пытаюсь отсортировать список многочленов, написанных в следующем формате: (M [коэффициент] [общая степень] [список переменных]).

пример:

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

Это: a + a * c + a ^ 2 + a * b, мне нужно получить a + a * b + c + a * a ^ 2, потому что a * b <a ^ 2 и a <a ^ 2.

Я пытался использовать функцию сортировки, но мой вывод:

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

это + a ^ 2 + a * b + a * c.

Я использую:

(defun sort-poly (a b)
  (cond 
    (t (sort-poly-helper (varpowers a) (varpowers b)))))

(defun sort-poly-helper (a b)
  (cond 
    ((null a) (not (null b)))
    ((null b) nil)
    ((equal (third(first a)) (third(first b))) (sort-poly-helper (rest a) (rest b)))
    (t (sort (list (third(first a)) (third(first b))) #'string-lessp))))

с:

 (sort '((M 1 1 ((V 1 A))) (M 1 2 ((V 1 A) (V 1 C))) (M 1 2 ((V 2 A))) (M 1 2 ((V 1 A) (V 1 B)))) #'sort-poly)

Некоторая помощь? Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос