我需要帮助解决方案表达式

I need help wrapping my head around a scheme expression

(apply map list '((a b c) (1 2 3))) => ((a 1) (b 2) (c 3))

我真的无法理解这个表达。这里发生了什么?

您首先需要了解的是map 的作用。 map 接受一个函数和一个或多个列表。 map 然后在每个列表的第一个元素上调用该函数,它成为 map 返回的列表中的第一个值。 map 对每个列表中的第二个元素重复此操作,依此类推,直到其中一个列表用完所有元素。例如:

(map + '(1 2 3) '(4 5 6)) => (5 7 9)

map 首先在每个列表的第一个参数 1 和 4 上调用 + 以获得 5 作为结果列表中的第一个值。其他值同理计算

apply 通过将一个函数、一组值和一个列表作为其最后一个参数来工作。 apply 首先将除函数之外的所有参数附加到作为最后一个参数传入的列表中,以便:

(apply map list '((a b c) (1 2 3)))

变成

(apply map (list list '(a b c) '(1 2 3)))

apply 然后调用传递给它的函数,并将列表的每个元素作为单独的参数,所以上面变成:

(map list '(a b c) '(1 2 3))

map 将在每个列表的第一个参数上调用 list 并获得 (a 1),它成为结果列表中的第一个值。其余列表也会发生同样的事情。

apply 作为代码的纯文本转换很容易处理,来自

(apply map list '( (a b c)  (1 2 3) ))

(      map list   '(a b c) '(1 2 3)  )