试图将子列表列表中的所有元素与 lisp 中另一个列表中的元素相乘
Trying to multiply all elements in a list of sublists with elements in another list in lisp
我正在尝试将一个包含 n 个子列表的列表与一个包含 n 个标量的列表相乘。它应该像这样工作:
(kmult-matrix '((3 4 2 4) (2 5 6 9) (1 -2 8 10)) '(2 3 5))
=> ((6 8 4 8) (6 15 18 27) (5 -10 40 50))
每个第 n 个子列表与第二个列表中的第 n 个标量相乘。这是到目前为止我得到的结果:
(defun kmult-matrix (m k)
(apply 'append (mapcar (lambda (x1)
(mapcar (lambda (x2)
(mapcar (lambda (x3)
(* x3 x1))
x2))
m))
k)))
这导致:
((6 8 4 8) (4 10 12 18) (2 -4 16 20) (9 12 6 12) (6 15 18 27) (3 -6 24 30) (15 20 10 20) (10 25 30 45) (5 -10 40 50))
希望可以问这个问题,因为它是一个作业,我觉得我离解决方案不远了。顺便说一句,我必须使用mapcar。
比那容易多了。请记住 mapcar
可以包含多个列表。因此:
(defun kmult-matrix (m k)
(mapcar (lambda (list k)
;; inside here you get a list and
;; it's corresponding multiplier k
...)
m
k))
外部映射的结果将是一个列表,其元素的数量与子列表 m
的数量相同(以及 k
中的相应元素)。在 lambda 内部,你在 lst
上做另一个映射,它对每个元素进行乘法。以便内部地图为外部地图中的每个元素生成一次列表答案。
我正在尝试将一个包含 n 个子列表的列表与一个包含 n 个标量的列表相乘。它应该像这样工作:
(kmult-matrix '((3 4 2 4) (2 5 6 9) (1 -2 8 10)) '(2 3 5))
=> ((6 8 4 8) (6 15 18 27) (5 -10 40 50))
每个第 n 个子列表与第二个列表中的第 n 个标量相乘。这是到目前为止我得到的结果:
(defun kmult-matrix (m k)
(apply 'append (mapcar (lambda (x1)
(mapcar (lambda (x2)
(mapcar (lambda (x3)
(* x3 x1))
x2))
m))
k)))
这导致:
((6 8 4 8) (4 10 12 18) (2 -4 16 20) (9 12 6 12) (6 15 18 27) (3 -6 24 30) (15 20 10 20) (10 25 30 45) (5 -10 40 50))
希望可以问这个问题,因为它是一个作业,我觉得我离解决方案不远了。顺便说一句,我必须使用mapcar。
比那容易多了。请记住 mapcar
可以包含多个列表。因此:
(defun kmult-matrix (m k)
(mapcar (lambda (list k)
;; inside here you get a list and
;; it's corresponding multiplier k
...)
m
k))
外部映射的结果将是一个列表,其元素的数量与子列表 m
的数量相同(以及 k
中的相应元素)。在 lambda 内部,你在 lst
上做另一个映射,它对每个元素进行乘法。以便内部地图为外部地图中的每个元素生成一次列表答案。