Le

Leképezés ebben a kurzusban: Common Lisp

12 feladat

A(z) Leképezés fogalomról

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”.)

Több lista is

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"))

További leképező függvények

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.

Leképezés más sorozatokon

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:

  • az első az eredményül kapott sorozat típusa
  • a második az alkalmazandó függvény
  • a harmadik és a továbbiak pedig azok a sorozatok, amelyeken dolgozni fog.
(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.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Leképezés fogalmat

A gyakorlás zárolva

Oldj fel még 8 feladatot, hogy gyakorolhasd a(z) Leképezés fogalmat