我需要帮助解决方案表达式
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) )
(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) )