A leképezés során egy függvényt alkalmazunk egy sorozat minden egyes elemére, hogy így egy új sorozatot kapjunk.
Ez egy listán könnyedén megtehető a mapcar függvénnyel.
Tegyük fel, hogy adott egy double nevű függvény, amely az argumentumát 2-vel szorozza:
(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)
Figyeld meg, hogy az első argumentum a meghívandó függvény. A #' egy speciális idéző szintaxis, amellyel függvényt adhatunk meg.
A double-t először az első elemmel hívtuk meg, aztán a másodikkal, és így tovább.
A kapott eredmények egy listába gyűltek, és ez a lista lesz a kifejezés kiértékelésének az eredménye.
A szűrés az a folyamat, amelynek során az egyik sorozatból egy másikat hozunk létre úgy, hogy az eredeti sorozat minden elemét átmásoljuk, kivéve bizonyos elemeket. Hogy mely elemek kerüljenek az új sorozatba, eldönthetjük egy predikátumfüggvénnyel (olyan függvénnyel, amelynek az értéke egy Boolean érték), vagy egy adott objektummal való egyenlőség alapján.
A remove-if egy olyan függvény, amely argumentumként egy predikátumfüggvényt és egy sorozatot vár, és csak azokból az elemekből álló sorozatot ad vissza, amelyekre a predikátum hamis értéket adott.
Más szóval „eltávolítja” a sorozat minden olyan elemét, amelyre a predikátum igaz értéket ad. Ne feledd azonban, hogy ez a függvény nem módosítja az eredeti sorozatot!
Ehelyett egy új sorozatot ad vissza, amelyből az érintett elemek hiányoznak. Ha a predikátum minden értékre igaz volt, akkor üres sorozatot ad vissza.
(remove-if #'evenp '(1 2 3 4 5)) ; => (1 3 5)
(remove-if #'oddp '(1 3 5)) ; => ()
Ha egy adott elemet szeretnénk eltávolítani egy sorozatból, használhatjuk a remove függvényt, amely az eltávolítandó elemet és egy sorozatot vár.
A függvény a sorozat minden olyan értékét visszaadja, amely nem egyenlő az eltávolítandó elemmel.
MEGJEGYZÉS: Az egyenlőséget alapértelmezés szerint az eql általános egyenlőségpredikátum ellenőrzi.
(remove 1 '(1 2 1 3 1 4)) ; => (2 3 4)
(remove #\l "hello") ; => "heo"
Lucy, a Lisp-űrlény szereti a számokat, és néhányat közülük „nagyszerűnek” tart.
Megkér, hogy segíts nekik függvényeket írni, amelyekkel még nagyszerűbbé tehetik a számokat.
Az, hogy Lucy szerint mi tesz egy számot nagyszerűvé, változhat, ezért a függvényeknek rugalmasnak kell lenniük.
Ahhoz, hogy egy számlistából nagyszerűbb számok listáját kapd, írnod kell egy make-magnificent-maybe függvényt, amely kap egy függvényt, amit a számokra kell alkalmazni, és egy számlistát.
Az eredmény egy olyan számlista legyen, amelynek elemei nagyszerűbbek (a megadott függvény szerint).
(make-magnificent-maybe #'square '(1 2 3)) ; => (1 4 9)
(make-magnificent-maybe #'1+ '(1 2 3)) ; => (2 3 4)
Miután (remélhetőleg) nagyszerűbbé tetted a számokat, Lucy csak azokat a számokat szeretné látni, amelyek valóban nagyszerűek.
Biztosan tudják, hogy az 1 soha nem nagyszerű, ezért azt egyszerűen el kell távolítanod.
Ezen kívül azonban Lucy néha meggondolja magát, ezért ismét adnak neked egy függvényt, amely megmondja, hogy egy szám nagyszerű-e vagy sem.
Írnod kell egy only-the-best függvényt, amely kap egy függvényt és egy számlistát, és csak a legjobb számokat adja vissza (nem a 1-et, és nem azokat a számokat, amelyekre a függvény igaz értéket ad).
(only-the-best #'evenp '(1 2 3 4 5)) ; => (3 5)
(only-the-best #'oddp '(1 3 5)) ; => ()
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Common Lisp nyelvet 27 fogalom92 feladat segítségével, valódi emberi mentorálással, mindez ingyen.