在Lisp中乘以2个列表

hun*_*rge 1 lisp function multiplying

我有一个函数,它将2个列表作为输入,我想使它使第一个列表中的所有内容与第二个列表中的所有内容相乘,然后计算总和.

到目前为止,这是我的功能:

(defun multiply(a b)
(if (eq a nil)
0
(progn
      (* (car a) (car b))
  (multiply (car a) (cdr b)))
))
Run Code Online (Sandbox Code Playgroud)

目前,我正试图让它做的是从第一个列表中取第一个数字,然后将第一个数字与第二个列表中的所有数字相乘.但是,当在函数内重新调用函数时,我收到此错误:

(这是我输入的,'(1 2 3)和'(4 5 6))

值1不是类型列表.

(MULTIPLY 1'(5 6))

任何帮助将非常感激.

use*_*lpa 7

loop可以接受的?

情况1

如果结果应该是90,

(+ (* 1 4) (* 1 5) (* 1 6) (* 2 4) (* 2 5) (* 2 6) (* 3 4) (* 3 5) (* 3 6))
Run Code Online (Sandbox Code Playgroud)

那么你可以做到

(defun multiply (a b)
  (loop for i in a
    sum (loop for j in b
          sum (* i j))))
Run Code Online (Sandbox Code Playgroud)

案例2

如果结果应该是32,

(+ (* 1 4) (* 2 5) (* 3 6))
Run Code Online (Sandbox Code Playgroud)

那就是

(defun multiply (a b)
  (loop 
    for i in a
    for j in b
    sum (* i j)))
Run Code Online (Sandbox Code Playgroud)


Lie*_*yan 6

如果你想为每个元素乘以两个列表,你应该只能使用mapcar:

(mapcar #'* '(3 4 5) '(4 5 6))
Run Code Online (Sandbox Code Playgroud)

至于现有函数中的错误,这一行应该是:

...
  (multiply (cdr a) (cdr b)))
...
Run Code Online (Sandbox Code Playgroud)