我有一个将 2 个列表作为输入的函数,我想让第一个列表中的所有内容都与第二个列表中的所有内容相乘,然后计算总和。
到目前为止,这是我的功能:
(defun multiply(a b)
(if (eq a nil)
0
(progn
(* (car a) (car b))
(multiply (car a) (cdr b)))
))
目前我想让它做的就是从第一个列表中取出第一个数字,然后将其与第二个列表中的所有内容相乘。但是,当函数在函数中被重新调用时,我得到了这个错误:
(这是我输入的,'(1 2 3)和'(4 5 6))
值 1 不是列表类型。
(乘以 1 '(5 6))
任何帮助将不胜感激。
最佳答案
loop
是否可以接受?
案例一
如果结果应该是 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))))
案例二
如果结果应该是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/