我正在创建一个与多项式相乘的函数。其中一部分涉及确定我是否将两个相同的变量(5x * 3x)或两个不同的变量(5x * 3y)相乘。
该函数采用两个参数(p1和p2),它们是要乘的多项式。它们以以下形式输入:
'(5 (x 2)) '(3 (y 3))
= 5x^2 * 3y^3.
(这些可能是任何东西......)
所以我有一个if语句来确定变量是否相同:
(if (EQUAL (car(car (cdr p1))) (car(car (cdr p2)))).
其中(car(car (cdr p1))
和(car(car (cdr p2))
是x
和y
。
我现在想将这两个变量添加到列表中,以使列表看起来像(x y)
。
这是我尝试过的:
(setq pList (append (car(car ( cdr p1 )))))
(setq pList (append (car(car ( cdr p2 )))))
但似乎发生的是第一行代码将X
添加到列表中,但第二行代码将x
替换为y
,所以我是刚离开(y)
。我尝试了各种各样的东西,但似乎没有任何效果!
非常感谢任何帮助!
答案 0 :(得分:2)
(defun multp (p1 p2)
(let ((x1 (caadr p1)) (x2 (caadr p2)))
(format t "x1 is ~a, x2 is ~a~%" x1 x2)
(let ((plist (if (equal x1 x2) (list x1) (list x1 x2))))
(format t "plist is ~a~%" plist))))
然后
(multp '(5 (x 2)) '(3 (x 3)))
=>
x1 is X, x2 is X
plist is (X)
NIL
和
(multp '(5 (x 2)) '(3 (y 3)))
=>
x1 is X, x2 is X
plist is (X Y)
NIL