从Lisp中的列表中删除子列表

时间:2014-12-06 16:52:42

标签: recursion lisp common-lisp

我有一个函数可以将两个多项式相加,但是如果两个多项式的总和为0,那么答案中仍会返回。我需要能够从列表中删除0个系数及其术语。

我的多项式被表示为5x ^ 2是((5((2 x))))

例如,如果多项式为2x ^ 2 + 3y + 0x ^ 2,则看起来像。

((5 ((2 x)))
 (3 ((1 y)))
 (0 ((2 x))))

我有一些代码可以识别列表中的第一个列表是否具有0系数,但我很难通过列表进行递归,如果系数为0则删除。

这是我的代码:

(defun my-remove(a)
  (if(null a)
     a
     (if(equal (car(car a)) 0)
        t
        nil)))

目前,如果第一个列表的系数为0,则返回true,否则返回false。

1 个答案:

答案 0 :(得分:1)

CL-USER 52 > (remove 0 '((5 ((2 x)))
                         (3 ((1 y)))
                         (0 ((2 x))))
                     :key #'first)
((5 ((2 X))) (3 ((1 Y))))