问题描述
我想将scheme中2个列表的元素相乘,并将每次相乘的结果保存在函数返回的第三个列表中
并且..列表将始终具有相同的大小
python 中的想法是这样的
def multi_elements( l1,l2):
save = []
for i in range(len(l1)):
save.append(l1[i] * l2[i])
return save
a = [ 1,2,3]
b = [ 2,3,4]
c = multi_elements(a,b)
print("C= ",c)
=>C= [2,6,12]
我想做同样的事情,但在一个名为相同的函数中的方案 我只有3天的学习计划
(def (multi-elements list1 list2)
....
)
有什么建议吗?
解决方法
map
过程可用于映射多个列表。提供给 map
的过程应该接受与列表一样多的参数。您可以使用 *
映射两个列表以获得您想要的结果:
> (map * '(1 2 3) '(2 3 4))
(2 6 12)
由于 *
接受任意数量的参数,您还可以以相同的方式映射三个(或更多)列表:
> (map * '(1 2 3) '(2 3 4) '(2 2 2))
(4 12 24)
,
由于我们将一直使用到 l1
用完并且不考虑 Python 版本中 l2
的长度,因此我建议在 Scheme 中实现以下实现:
(define (multi-elements a b)
(if (null? a)
'() ;; We are at the end of the a list
(cons (* (car a) (car b))
(multi-elements (cdr a) (cdr b)))))
例如:
(define x (list 1 2 3))
(define y (list 2 3 4))
(multi-elements x y)
;; Returns (2 6 12)