私はこの形式で書かれた多項式のリストをソートしようとしています: (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 + A * C + A^2 + * bの、私は+ A * B + C + *のA^2を取得する必要があり、 * bの<^2と<^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 + * 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)
いくつかの助け? ありがとう
コードブロックの編集を送信しました。一般的なLispスタイルは、末尾に括弧を残さないようにすることです。また、再フォーマット中に、 'sort-poly'の' t'節と '()'の 'cond'節のような疑わしいものに気付きました。これは非常に奇妙で何もしません。 – verdammelt
ありがとうございます。あなたが正しいです、彼らは経験不足のちょうど "間違い"でした。私はlispの初心者です。 – Davide