Trilhas
/
Unison
Unison
/
Exercícios
/
Operações de stream
Operações de stream

Operações de stream

Médio

Instruções

Implemente operações básicas da habilidade Stream.

Em linguagens funcionais, funções como filter, map e reduce são muito comuns. Implemente uma série de combinadores funcionais básicos para uma habilidade de stream sem usar funções existentes. Para isso, você vai precisar escrever seus próprios manipuladores de habilidade.

💡 Vamos chamar essa habilidade de MyStream para evitar conflito com a habilidade Stream que já existe na biblioteca padrão.

As operações que você vai precisar implementar são:

  • MyStream.fromList (dada uma lista de elementos, crie um stream de elementos )
  • MyStream.toList (dado um stream de elementos, materialize-o em uma lista)
  • MyStream.toListWithResult (dado um stream de elementos, materialize-o em uma lista junto com o resultado da função de stream)
  • MyStream.ignore (dado um stream de elementos, ignore os valores emitidos e retorne os resultados da função de stream)
  • MyStream.filter (dado um predicado e um MyStream, retorne o MyStream com todos os itens para os quais predicate(item) é verdadeiro);
  • MyStream.map (dada uma função e um MyStream, retorne o MyStream com os resultados de aplicar function(item) a todos os itens);
  • MyStream.flatMap (dada uma função que produz um MyStream e um MyStream, retorne o MyStream com os resultados de aplicar function(item) a todos os itens)

Sobre a habilidade Stream

Um Stream é uma habilidade do Unison usada para emitir valores.

Você pode usar a habilidade Stream quando tem uma função que deve produzir valores como efeito secundário enquanto é chamada. Por exemplo, esta função retorna o último valor da lista, mas emite um total acumulado conforme cada elemento é visto:

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 o Stream como uma List junto com o valor de retorno da função que o produz, usando um manipulador de habilidade:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
Editar via GitHub O link abre em uma nova janela ou aba
Unison Exercism

Tudo pronto para começar Operações de stream?

Crie sua conta no Exercism para aprender e dominar Unison com 53 exercícios e mentoria humana de verdade, tudo de graça.