概述

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,但是破壞性地修改其第一個序列引數以保持函式應用的結果。