Implementa le operazioni di base dell'ability Stream.
Nei linguaggi funzionali, funzioni come filter, map e reduce sono molto comuni. Implementa una serie di combinatori funzionali di base per un'ability di stream senza usare le funzioni esistenti. Per farlo dovrai scrivere dei gestori di ability.
💡 Chiameremo questa ability MyStream per evitare conflitti con l'ability Stream già presente nella libreria standard.
Le operazioni che dovrai implementare sono:
MyStream.fromList (dato un array di elementi, crea uno stream di elementi )MyStream.toList (dato uno stream di elementi, materializzalo in un array)MyStream.toListWithResult (dato uno stream di elementi, materializzalo in un array insieme al risultato della funzione di stream)MyStream.ignore (dato uno stream di elementi, ignora i valori emessi e restituisci il risultato della funzione di stream)MyStream.filter (dato un predicato e un MyStream, restituisci il MyStream di tutti gli elementi per cui predicate(item) è vero);MyStream.map (data una funzione e un MyStream, restituisci il MyStream dei risultati dell'applicazione di function(item) a tutti gli elementi);MyStream.flatMap (data una funzione che produce un MyStream e un MyStream, restituisci il MyStream dei risultati dell'applicazione di function(item) a tutti gli elementi)Stream
Stream è un'ability di Unison che si usa per emettere valori.
Potresti usare l'ability Stream se hai una funzione che deve produrre valori come effetto secondario mentre viene chiamata. Per esempio, questa funzione restituisce l'ultimo valore dell'array, ma emette un totale progressivo man mano che ogni elemento viene esaminato:
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]
Possiamo materializzare lo Stream come una List, accanto al valore restituito dalla funzione che lo produce, con un gestore di ability:
> Stream.toListWithResult! emitRunningTotal
⧩
([1, 3, 5, 7, 9], 5)
Iscriviti a Exercism per imparare e padroneggiare Unison con 53 esercizi e il mentoring di persone reali, tutto gratis.