概述

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,但是破坏性地修改其第一个序列参数以保持函数应用的结果。