1

例如: (3x 2 - 5x + 2)(7x + 1) 并像这样简化它:

((3 2)(-5 1)(2 0))((7 1)(1 0))
((21 3)(3 2)(-35 2)(-5 1)(14 1)(2 0))
(21 3)(32 2)(9 1)(2 0)

你得到这个答案:21x 3 + 32x 2 + 9x + 2

我在 lisp 中需要这个解决方案,请帮忙

4

1 回答 1

0

对于第一阶段,您需要将每个 LHS 组件与每个 RHS 组件配对;两组的笛卡尔积。这需要一个二级映射,然后将二级对列表连接成一个顶级列表(想想(apply #'append ...)。

第二阶段可以通过建立关联列表的reduce来完成,以指数为键。

编辑:让我为您解决一个不同的问题,并让您弄清楚如何将其转化为您的问题的解决方案:

(a + b + ... + k) * (l + m + ... + z)通过首先展开成对然后对乘积求和来计算:

(defun mul-sums (aa bb)
  (reduce #'+
          (apply #'append
                 (map 'list
                      #'(lambda (a)
                          (map 'list
                               #'(lambda (b)
                                   (* a b))
                               bb))
                      aa))))
; Compute (1 + 2 + 3) * (3 + 4).
> (mul-sums '(1 2 3) '(3 4))
42
于 2010-05-15T09:24:08.640 回答