Tracks
/
Unison
Unison
/
Ejercicios
/
Operaciones de Stream
Operaciones de Stream

Operaciones de Stream

Intermedia

Instrucciones

Implementa las operaciones básicas de la ability Stream.

En los lenguajes funcionales, funciones como filter, map y reduce son muy comunes. Implementa una serie de combinadores funcionales básicos para una ability de stream sin usar las funciones que ya existen. Para esto vas a tener que escribir tus propios manejadores de ability.

💡 A esta ability la vamos a llamar MyStream para evitar que choque con la ability Stream que ya existe en la biblioteca estándar.

Las operaciones que vas a implementar son:

  • MyStream.fromList (dada una lista de elementos, crea un stream de elementos)
  • MyStream.toList (dado un stream de elementos, conviértelo en una lista)
  • MyStream.toListWithResult (dado un stream de elementos, conviértelo en una lista junto con el resultado de la función del stream)
  • MyStream.ignore (dado un stream de elementos, ignora los valores emitidos y devuelve los resultados de la función del stream)
  • MyStream.filter (dado un predicado y un MyStream, devuelve el MyStream con todos los elementos para los que predicate(item) sea verdadero);
  • MyStream.map (dada una función y un MyStream, devuelve el MyStream con los resultados de aplicar function(item) a todos los elementos);
  • MyStream.flatMap (dada una función que produce un MyStream y un MyStream, devuelve el MyStream con los resultados de aplicar function(item) a todos los elementos)

Sobre la ability Stream

Un Stream es una ability de Unison que se usa para emitir valores.

Podrías usar la ability Stream si tienes una función que debe producir valores como efecto secundario al ser llamada. Por ejemplo, esta función devuelve el último valor de la List, pero emite un total acumulado a medida que ve cada elemento:

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]

Podemos materializar el Stream como una List junto con el valor que devuelve la función que lo produce, usando un manejador de ability:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Unison Exercism

¿Todo listo para empezar Operaciones de Stream?

Regístrate en Exercism para aprender y dominar Unison con 53 ejercicios y mentoría humana real, todo gratis.