概述
Common Lisp 中提供了一组高级映射函数 ,用于将函数应用于一个或多个列表的元素。它们的不同之处在于函数应用于列表的方式以及如何获得最终结果。下表总结了每个等效 LOOP 表单的差异和显示。 F 是要应用的函数,必须具有等于列表数量的多个参数; 应用于汽车意味着它依次应用于列表的元素,“应用于 cdr”意味着它依次应用于列表,它们的 cdr,它们的 cddr 等; returns
列显示全局结果是通过列出结果获得的,连接它们(因此它们必须是列表!),或者仅用于副作用(在这种情况下,返回第一个列表)。
功能 | 应用于 | 返回 | 等效 LOOP |
---|---|---|---|
(mapcar fl 1 … l n ) | 汽车 | 结果列表 | (循环为 x 1 in l 1 … for x n in l n collect(fx 1 … x n )) |
(maplist fl 1 … l n ) | CDR | 结果列表 | (循环为 x 1 on l 1 … for x n on l n collect(fx 1 … x n )) |
(mapcan fl 1 … l n ) | 汽车 | 结果的连接 | (循环为 x 1 in l 1 … for x n in l n nconc(fx 1 … x n )) |
(mapcon fl 1 … l n ) | CDR | 结果的连接 | (循环为 x 1 on l 1 … for x n on l n nconc(fx 1 … x n )) |
(mapc fl 1 … l n ) | 汽车 | l 1 | (循环为 x 1 in l 1 … for x n in l n do(fx 1 … x n )finally(return l 1 )) |
(mapl fl 1 … l n ) | CDR | l 1 | (循环为 x 1 on l 1 … for x n on l n do(fx 1 … x n )finally(return l 1 )) |
请注意,在所有情况下,列表可以具有不同的长度,并且应用程序在最短列表终止时终止。
另外两个地图函数是可用的: map
,可以应用于序列(字符串,向量,列表),类似于 mapcar
,并且可以返回任何类型的序列,指定为第一个参数, map-into
,类似于 map
,但是破坏性地修改其第一个序列参数以保持函数应用的结果。