将整数变量添加到Lisp列表

时间:2013-12-31 10:29:14

标签: list lisp append common-lisp

我正在创建一个与多项式相乘的函数。其中一部分涉及确定我是否将两个相同的变量(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))xy

我现在想将这两个变量添加到列表中,以使列表看起来像(x y)

这是我尝试过的:

(setq pList (append (car(car ( cdr p1 )))))
(setq pList (append (car(car ( cdr p2 )))))

但似乎发生的是第一行代码将X添加到列表中,但第二行代码将x替换为y,所以我是刚离开(y)。我尝试了各种各样的东西,但似乎没有任何效果!

非常感谢任何帮助!

1 个答案:

答案 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