在lisp中乘法2个向量

在lisp中乘法2个向量,lisp,Lisp,我正在尝试用lisp对两个向量进行乘法。 我的代码是: (defun produs(x y) (cond ((or (null x) (null y)) nil) ((eq (cdr x) nil) (cons (* (car x) (car y)) (cdr y))) ((eq (cdr y) nil) (cons (* (car x) (car y)) (cdr x))) (t

我正在尝试用lisp对两个向量进行乘法。 我的代码是:

(defun produs(x y)
  (cond
    ((or (null x) (null y))
     nil)
    ((eq (cdr x) nil)
     (cons (* (car x) (car y))
           (cdr y))) 
    ((eq (cdr y) nil)
     (cons (* (car x) (car y))
           (cdr x)))
    (t
     (cons (* (car x) (car y))
           (produs (cdr x) (cdr y))))))
当我核实

(produs '(7) '(1 2))
它给我7.2分


第4行代码没有指定,如果x体的其余部分为nil,则将其与y的所有元素相乘?

如果我正确理解了您想要实现的目标,则此代码应起作用:

(defun produs(x y)
(cond
((or (null x) (null y)) nil)
((eq (cdr x) nil) ( cons (* (car x)(car y))(produs (cdr y) x )))
((eq (cdr y) nil) ( cons (* (car x)(car y)) (produs (cdr x) y)))
(t (cons (*(car x)(car y)) (produs (cdr x)(cdr y))))
)
)
问题是,您不是说要将所有元素与头x相乘,而是将y中的所有剩余元素添加到结果列表中

(produs '(7) '(1 2)) => (7 14)

您还可以尝试稍微重构代码,以避免重复您自己:

(defun produs (x y)
  (when (and x y)
    (cons (* (first x) (first y))
          (let ((rx (rest x))
                (ry (rest y)))
            (cond
              ((and rx ry) (produs rx ry))
              (rx (produs rx y))
              (ry (produs ry x)))))))

你想执行什么样的向量乘法?我想你可以试着把cdry改成produs cdr y xPlease indent并格式化你的代码。