function - 在 Lisp 中乘以 2 个列表

标签 function lisp multiplication

我有一个将 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/

相关文章:

c - 函数返回错误值,在 C 中,使用 gcc Intel 编译器

Java 类 - 如何将通用对象传递给函数

php - PHP中的移位与乘法

javascript - 编写一个 javascript 乘法函数,它将返回两个单独的结果

python-3.x - 我在使用 *mul* 运算符乘以变量时遇到问题

将一维字符串复制到二维数组元素中

c - 返回类型为 void (*signal(int signo, void *(func)(int)))(int) 的原因

programming-languages - Lisp 真的不是函数式编程语言吗?

lisp - elisp/lisp 中的 'require' 是否会阻止重新加载库?

package - common-lisp 包中的阴影(重新定义)符号最终出现错误