A leképezés során egy függvényt alkalmazunk egy sorozat minden elemére, hogy egy új sorozatot kapjunk.
A mapcar használható arra, hogy egy függvényt egy objektumokból álló listára képezzünk le.
(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)
Figyeld meg, hogy az első argumentum egy meghívandó függvény.
A #' egy speciális idéző szintaxis, amellyel függvényt adhatunk meg.
(Használhatnánk itt a 'double alakot is, de a #' használata idiomatikus, és vitathatatlanul „helyesebb”.)
A leképezés nem korlátozódik arra, hogy egy függvényt egyetlen sorozatra alkalmazzunk: több sorozattal is elvégezhető.
Ha N sorozatot adunk meg, akkor a függvénynek N argumentumot kell fogadnia.
(mapcar #'list '(1 2) '(a b) '("foo" "bar")) ; => ((1 a "foo") (2 b "bar"))
A mapcar mellett más függvények is léteznek a listák leképezésére.
A mapcar a leggyakoribb, de érdemes a többit is ismerni.
A maplist hasonlóan működik, mint a mapcar, de nem az elemeken, hanem az egymást követő részlistákon dolgozik.
Először a teljes listán, aztán a cdr-en, majd annak a cdr-jén, és így tovább:
(maplist #'identity '(a b c)) ; => ((A B C) (B C) (C))
A mapc és a mapl olyan, mint a mapcar, illetve a maplist, de nem gyűjtik össze az eredményeket, hanem az első listát adják vissza.
Ezt mellékhatással járó műveleteknél használjuk.
A mapcan és a mapcon olyan, mint a mapcar, illetve a maplist, de az eredményt a nconc lapítja ki, amely hasonlít az append-re, csak az utolsó kivételével minden argumentumát destruktívan módosítja.
A leképezés nem korlátozódik a listákra. Bármely sorozaton végezhetünk leképezést (a sorozatokat egy másik fogalom tárgyalja).
Nem listátípusú sorozatok esetén a map függvényt használjuk.
A map három vagy több argumentumot fogad:
(map 'list #'double '(1 2 3)) ; => (2 4 6)
(map 'string #'char-upcase "foobar") ; => "FOOBAR"
Különleges eset: ha az eredményül kapott sorozat típusaként nil-t adunk meg, akkor nil lesz a visszatérési érték.
Ezt (a fenti mapc-hez és mapl-hez hasonlóan) mellékhatások elérésére használjuk.