作为更大项目的一部分,我希望能够将每个子列表的每个第一个元素复用为-1。我正试图像这样使用递归来做这件事:
(defun negative (secondpoly)
(let ((t1(car secondpoly))
(rem(cdr secondpoly)))
(let ((c1(car t1)))
(if (not (null (cdr secondpoly)))
(negative (append (* c1 -1) rem))
)
)
)
)
使用此输入:
(pminus '((5 x 2)(100 x 2)))
我想收到这个输出:
(pminus '((-5 x 2)(-100 x 2)))
我想知道是否有人可以告诉我这样做的方法吗?
答案 0 :(得分:1)
如果您的输入确实如下:'(pminus ((5 x 2)(100 x 2)))
(defun negative-first (poly)
(cons (car poly)
(mapcar (lambda (el)
(cons (- (car el)) (cdr el)))
(cadr poly))))
CL-USER> (negative-first '(pminus ((5 x 2)(100 x 2))))
(PMINUS (-5 X 2) (-100 X 2))
但对我来说,看起来似乎有一个错误的解释,你的输入是'((5 x 2)(100 x 2))
,如果是这样,你的功能是:
(defun negative-first (poly)
(mapcar (lambda (el)
(cons (- (car el)) (cdr el)))
poly))
CL-USER> (negative-first '((5 x 2)(100 x 2)))
((-5 X 2) (-100 X 2))
如果你需要使用更多嵌套和复杂的数据,你可能应该为谁做一些例子,这个函数只适用于一个级别((5 x 2) (100 x 2) (40 x 3) .... )
。