Scheme 我需要有人帮我把脑袋绕在一个计划表达式上

Scheme 我需要有人帮我把脑袋绕在一个计划表达式上,scheme,lisp,racket,Scheme,Lisp,Racket,我真的无法理解这个表达。这里发生了什么?您需要了解的第一件事是map的作用映射接受一个函数和一个或多个列表map然后对每个列表的第一个元素调用该函数,该函数将成为map返回的列表中的第一个值map对每个列表中的第二个元素重复此操作,依此类推,直到其中一个列表的元素用完为止。例如: (apply map list '((a b c) (1 2 3))) => ((a 1) (b 2) (c 3)) mapfirst对每个列表的第一个参数1和4调用+,以获得5作为结果列表中的第一个值。其他值

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

您需要了解的第一件事是
map
的作用<代码>映射接受一个函数和一个或多个列表
map
然后对每个列表的第一个元素调用该函数,该函数将成为
map
返回的列表中的第一个值
map
对每个列表中的第二个元素重复此操作,依此类推,直到其中一个列表的元素用完为止。例如:

(apply map list '((a b c) (1 2 3))) => ((a 1) (b 2) (c 3))
map
first对每个列表的第一个参数1和4调用
+
,以获得5作为结果列表中的第一个值。其他值的计算方法相同

apply
采用一个函数、一组值和一个列表作为其最后一个参数
apply
首先将函数之外的所有参数追加到作为最后一个参数传入的列表中,以便:

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

(apply map list '((a b c) (1 2 3)))
apply
然后使用列表中的每个元素作为单独的参数调用传递给它的函数,因此上面的内容变成:

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

map
将对每个列表的第一个参数调用
list
,并获取
(a1)
,该值将成为结果列表中的第一个值。其他列表也会发生同样的情况。

apply
作为代码的纯文本转换,从

(map list '(a b c) '(1 2 3))
(应用地图列表“((a b c)(1 2 3))) 到

(地图目录"(a b c)(1 2 3)
很快,您将记住“apply map list”,这是一个著名的Lisp习语,用于转换2D列表矩阵。我一直听到传言说,谷歌对“地图缩减”不满意,正计划在其集群上推出“应用地图列表”,以扭转互联网的颓势。 (apply map list '( (a b c) (1 2 3) )) ( map list '(a b c) '(1 2 3) )