Kurzusok
/
Tcl
Tcl
/
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.

A Tcl apply parancsa

A tesztesetek elsőre zavarosnak tűnhetnek. Neked ezt kell megvalósítanod:

set myList {alpha beta gamma delta}
listOps::filter $myList {{word} {expr {[string length $word] == 4}}

Miért van annyi kapcsos zárójel abban az utolsó argumentumban?

Emlékezz rá, hogy a proc parancs definíciója így néz ki:

proc procName argList body

A Tcl-nek van egy apply parancsa:

apply func ?arg1 arg2 ...?

ez a „func” egy kételemű lista, {argList body}, ami lényegében egy névtelen proc (vagy „lambda”). Az apply parancs meghívja azt a névtelen procot, és átadja neki a szükséges argumentumokat.

Például ezek egyenértékűek:

# using proc
proc myReverse {str} {return [string reverse $str]}
puts [myReverse "Hello, World!"]

# using apply
puts [apply {{str} {string reverse $str}} "Hello, World!"]

# or, store the func in a variable
set func {{str} {string reverse $str}}
puts [apply $func "Hello, World!"]

Az apply használatával egyszerűbb a kódblokkokat továbbadni.

Hivatkozás: apply, proc.

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

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

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Tcl nyelvet 135 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.