(M [계수] [총 학위] [변수 목록]) 형식으로 작성된 다항식 목록을 정렬하려고합니다.정렬 다항식 Common Lisp
예 :
((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 * C + A^2 + A * B를, I는 + A * B + C + A * A를^2를 얻을 필요 때문에 * B를 <^2 및 <^2
I 함수 정렬 방법을 사용했지만, 제 출력된다 :
+ A^2 + A * B는 인((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 * 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)
어떤 도움? 감사합니다.
코드 블록에 대한 수정 사항을 제출했습니다. 일반적인 Lisp 스타일은 후행 괄호를 자신의 줄에 남기지 않는 것입니다. 또한 형식을 재조정하는 동안'sort-poly'의't' 절과'()'의'cond' 절과 같은 의심스러운 항목을 발견했습니다.이 조건은 매우 이상하지만 아무 것도하지 않을 것입니다. – verdammelt
감사합니다. 당신 말이 맞아요, 그들은 단지 미경험의 "실수"였습니다. 저는 Lisp의 초보자입니다. – Davide