例如: (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 中需要这个解决方案,请帮忙
例如: (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 中需要这个解决方案,请帮忙
对于第一阶段,您需要将每个 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