Rutas
/
Unison
Unison
/
Ejercicios
/
Operaciones con streams
Operaciones con streams

Operaciones con streams

Media

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 existentes. Para ello tendrás que escribir tus propios manejadores de ability.

💡 Vamos a llamar a esta ability MyStream para no entrar en conflicto con la ability Stream que ya existe en la biblioteca estándar.

Las operaciones que tendrás que implementar son:

  • MyStream.fromList (dada una lista de elementos, crea un stream de elementos )
  • MyStream.toList (dado un stream de elementos, materialízalo en una lista)
  • MyStream.toListWithResult (dado un stream de elementos, materialízalo en una lista junto con el resultado de la función de stream)
  • MyStream.ignore (dado un stream de elementos, ignora los valores emitidos y devuelve los resultados de la función de stream)
  • MyStream.filter (dado un predicado y un MyStream, devuelve el MyStream con todos los elementos para los que predicate(item) es 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 habilidad Stream

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

Podrías usar la habilidad Stream si tienes una función que debe producir valores como efecto secundario mientras se ejecuta. Por ejemplo, esta función devuelve el último valor del array, pero emite un total acumulado a medida que se 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 un array junto con el valor devuelto de la función que lo produce mediante un manejador de habilidad:

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

¿Listo para empezar Operaciones con streams?

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