我有一个函数,它接受两个列表作为输入,我想使它使第一个列表中的所有内容与第二个列表中的所有内容相乘,然后计算总和。
到目前为止,我的功能是:

(defun multiply(a b)
(if (eq a nil)
0
(progn
      (* (car a) (car b))
  (multiply (car a) (cdr b)))
))

现在我要做的就是从第一个列表中取第一个数字,然后用第二个列表中的所有内容乘以一但是,当在函数中重新调用函数时,会出现此错误:
(这是我输入的,'(1236)和'(456))
值1不是list类型。
(乘以1'(56))
任何帮助都将不胜感激。

最佳答案

loop可以接受吗?
案例1
如果结果应该是90

(+ (* 1 4) (* 1 5) (* 1 6) (* 2 4) (* 2 5) (* 2 6) (* 3 4) (* 3 5) (* 3 6))

那你就可以了
(defun multiply (a b)
  (loop for i in a
    sum (loop for j in b
          sum (* i j))))

案例2
如果结果应该是32
(+ (* 1 4) (* 2 5) (* 3 6))

那就是
(defun multiply (a b)
  (loop
    for i in a
    for j in b
    sum (* i j)))

关于function - 在Lisp中将2个列表相乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20791963/

10-12 19:37