我需要帮助包围计划表达式

4 lisp scheme racket

(apply map list '((a b c) (1 2 3))) => ((a 1) (b 2) (c 3))
Run Code Online (Sandbox Code Playgroud)

我无法真正地围绕这个表达.这里发生了什么?

mal*_*per 7

你需要了解的第一件事是什么map.map采用一个函数和一个或多个列表.map然后在每个列表的第一个元素上调用该函数,这将成为返回的列表中的第一个值map.map对每个列表中的第二个元素重复此操作,依此类推,直到其中一个列表用完元素.例如:

(map + '(1 2 3) '(4 5 6)) => (5 7 9)
Run Code Online (Sandbox Code Playgroud)

map首先调用+每个列表的第一个参数1和4,得到5作为结果列表中的第一个值.其他值以相同的方式计算.

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

(apply map list '((a b c) (1 2 3)))
Run Code Online (Sandbox Code Playgroud)

(apply map (list list '(a b c) '(1 2 3)))
Run Code Online (Sandbox Code Playgroud)

apply 然后使用列表的每个元素作为单独的参数调用传递给它的函数,因此上面变为:

(map list '(a b c) '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

map将调用list每个列表的第一个参数,并将(a 1)其作为结果列表中的第一个值.其余的列表也会发生同样的事情.