【问题标题】:how to multiply the elements in two lists and save the result in a third list to return in scheme?如何将两个列表中的元素相乘并将结果保存在第三个列表中以在方案中返回?
【发布时间】:2021-08-21 13:20:54
【问题描述】:

我想将方案中 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)
    ....
)

有什么建议吗?

【问题讨论】:

  • 根据您对 Python 的了解,您在同化 Scheme 时会遇到问题。最好忘记你知道一门 algol 语言并专注于学习用 lisp 进行思考。你不会在 3 天内学会一门编程语言。您可能会学习一种您已经熟悉的方言,但不会学习一种新语言。例如。对于懂法语和意大利语的人来说,学习西班牙语可能很容易,但你不能指望 Finish 取决于你对西班牙语的理解程度。

标签: python list scheme mit-scheme gambit


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

    由于我们将一直持续到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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多