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