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)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)
Crie sua conta no Exercism para aprender e dominar Unison com 53 exercícios e mentoria humana de verdade, tudo de graça.