Kurzusok
/
Clojure
Clojure
/
Feladatok
/
Listaműveletek
Listaműveletek

Listaműveletek

Közepes

Utasítások

Valósítsd meg az alapvető listaműveleteket.

Funkcionális nyelvekben az olyan listaműveletek, mint a length, a map és a reduce, nagyon gyakoriak. Valósíts meg egy sor alapvető listaműveletet anélkül, hogy meglévő függvényeket használnál.

A megvalósítandó műveletek pontos száma és neve kurzustól függ, hogy elkerüljük a meglévő nevekkel való ütközést, de az általad megvalósítandó általános műveletek közé tartoznak:

  • append (adott két lista, a második lista összes elemét fűzd az első lista végéhez);
  • concatenate (adott egy sor lista, az összes lista minden elemét fűzd össze egyetlen lapos listává);
  • filter (adott egy predikátum és egy lista, add vissza mindazon elemek listáját, amelyekre predicate(item) igaz);
  • length (adott egy lista, add vissza a benne lévő elemek teljes számát);
  • map (adott egy függvény és egy lista, add vissza azoknak az eredményeknek a listáját, amelyeket úgy kapsz, hogy minden elemre alkalmazod a function(item)-et);
  • foldl (adott egy függvény, egy lista és egy kezdő akkumulátor, hajtsd (redukáld) az egyes elemeket balról az akkumulátorba);
  • foldr (adott egy függvény, egy lista és egy kezdő akkumulátor, hajtsd (redukáld) az egyes elemeket jobbról az akkumulátorba);
  • reverse (adott egy lista, add vissza egy listát az összes eredeti elemmel, de fordított sorrendben).

Figyelj rá, hogy a fold függvényeknek (foldl, foldr) átadott argumentumok sorrendje nem mindegy.

Függelék

Note

A fenti utasítások egy közös tárolóval vannak szinkronban, hogy minden nyelvi kurzuson egységesek legyenek. Ez a függelék további magyarázatot ad, illetve szükség szerint módosítja az utasításokat, hogy azok jobban illeszkedjenek a Clojure-kurzus céljaihoz.

Ennél a feladatnál a Clojure-kurzuson feltételezd, hogy a bemenet és a kimenet is vektor, ahogy a tesztek is jelzik. Ráadás célként gondold át, hogyan lehetne olyan megközelítést megvalósítani, amely a közbenső lépésekhez nem használ listákat.

Fontos, hogy ne használd fel újra a hasonló funkciójú, meglévő Clojure beépített függvényeket, mert ezzel csökkenne a feladat tervezett tanulási értéke. A clojure.core névtérből kerülendő kulcsfontosságú függvények: into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse és rseq.

Opcionális célok

Az opcionális cél azoknak szól, akik extra kihívást keresnek, és abból indul ki, hogy a fő célt már teljesítetted.

Próbáld meg úgy teljesíteni a teszteket, hogy olyan megközelítést találsz ki, amely feltételezi, hogy:

  • A bemenet és a kimenet is lista, nem vektor. Vedd figyelembe, hogy a teszteket, mint mindig, nem kell módosítani.
  • A közbenső lépésekhez nem használhatók vektorok.

Ha úgy döntesz, hogy közzéteszed, mindenképpen tegyél bele egy megjegyzést, amely jelzi, hogy ez a listákat használó opcionális célt valósítja meg. Ne felejtsd el frissíteni a docstringeket!

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

Készen állsz elkezdeni a(z) Listaműveletek feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Clojure nyelvet 12 fogalom105 feladat segítségével, valódi emberi mentorálással, mindez ingyen.

Mélyelemzés: Listaműveletek!

Élvezd a rekurzió gyakorlati bevezetését, fedezd fel a List Ops imperatív és funkcionális alternatíváit, és merülj el a farokhívásos rekurzióban és az akkumulátorfüggvényekben.