Kurzusok
/
Unison
Unison
/
Feladatok
/
Stream-műveletek
Stream-műveletek

Stream-műveletek

Közepes

Utasítások

Valósítsd meg a Stream képesség alapvető műveleteit.

A funkcionális nyelvekben nagyon gyakoriak az olyan függvények, mint a filter, a map és a reduce. Valósíts meg egy sor alapvető funkcionális kombinátort egy stream képességhez, anélkül hogy meglévő függvényeket használnál. Ehhez saját képességkezelőket kell írnod.

💡 Ezt a képességet MyStream-nek fogjuk nevezni, hogy ne ütközzön a standard könyvtár meglévő Stream képességével.

Ezeket a műveleteket kell megvalósítanod:

  • MyStream.fromList (adott egy elemlista, hozz létre belőle egy streamet)
  • MyStream.toList (adott egy stream, alakítsd listává)
  • MyStream.toListWithResult (adott egy stream, alakítsd listává a streamfüggvény eredményével együtt)
  • MyStream.ignore (adott egy stream, hagyd figyelmen kívül a kibocsátott értékeket, és add vissza a streamfüggvény eredményét)
  • MyStream.filter (adott egy predikátum és egy MyStream, add vissza azt a MyStream-et, amely minden olyan elemet tartalmaz, amelyre predicate(item) igaz);
  • MyStream.map (adott egy függvény és egy MyStream, add vissza annak a MyStream-jét, amit akkor kapsz, ha minden elemre alkalmazod a function(item) hívást);
  • MyStream.flatMap (adott egy függvény, amely egy MyStream-et állít elő, valamint egy MyStream, add vissza annak a MyStream-jét, amit akkor kapsz, ha minden elemre alkalmazod a function(item) hívást)

A Stream képességről

A Stream egy Unison-képesség, amely értékek kibocsátására szolgál.

A Stream képességet akkor használhatod, ha van egy függvényed, amelynek hívása közben mellékhatásként értékeket kell előállítania. Ez a függvény például visszaadja a lista utolsó értékét, de minden egyes elem láttán kibocsát egy futó összeget:

emitRunningTotal : '{Stream Nat} Nat
emitRunningTotal = 'let
  use Nat +
  List.foldLeft (
    acc a -> let
      runningTotal = acc + a
      Stream.emit runningTotal
      a
    ) 0 [1,2,3,4,5]

A Streamet előállító függvény visszatérési értéke mellett egy képességkezelővel listaként materializálhatjuk azt:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Unison Exercism

Készen állsz elkezdeni a(z) Stream-műveletek feladatot?

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