地图+;方案中的lambda表达式

地图+;方案中的lambda表达式,lambda,scheme,r5rs,Lambda,Scheme,R5rs,我想我(几乎)理解了map在Scheme中的工作原理,但我很难理解此代码的工作原理: (map (lambda (x y z) (y x z)) (list 1 2 3 4) (list + - * /) (list 5 6 7 8)) 这个过程中到底发生了什么 我们有一个map接收多个列表(本例中有三个)和一个处理它们的过程,每次从每个列表中提取一个元素: (map (lambda (x y z) (y x z)) (list 1 2 3 4) (list + -

我想我(几乎)理解了map在Scheme中的工作原理,但我很难理解此代码的工作原理:

(map (lambda (x y z) (y x z))
   (list 1 2 3 4) (list + - * /) (list 5 6 7 8))

这个过程中到底发生了什么

我们有一个
map
接收多个列表(本例中有三个)和一个处理它们的过程,每次从每个列表中提取一个元素:

(map (lambda (x y z) (y x z))
     (list 1 2 3 4)
     (list + - * /)
     (list 5 6 7 8))
理解这一点的关键在于
lambda
的主体中发生了什么,它按顺序从每个列表中传递一个元素,然后执行以下操作:

(y x z)
换句话说:我们从第二个列表中获取一个元素(这是一个过程),并将其应用于第一个和第三个列表中的元素。例如,对于前三个元素,我们将有:

(+ 1 5)
对于第二个要素:

(- 2 6)
等等。如您所知,
map
将构建一个新的列表,其结果是将该过程应用于其所有输入列表(按元素)。在本例中,结果将是:

'(6 -4 21 1/2)
这与:

(list (+ 1 5) (- 2 6) (* 3 7) (/ 4 8))

非常感谢你的解释!可以不使用map直接调用lambda表达式吗?@user16655当然可以,但它只接收三个参数,显然不会返回元素列表。您应该阅读
map
lambda
的文档以了解差异。