Trilhas
/
Elixir
Elixir
/
Exercícios
/
Números de Lucas
Números de Lucas

Números de Lucas

Exercício de aprendizagem

Introdução

Streams

Todas as funções no módulo Enum são eager. Ao realizar várias operações em enumeráveis com o módulo Enum, cada operação vai gerar um resultado intermediário.

O módulo Stream é uma alternativa lazy ao módulo Enum, que é eager. Oferece muitas das mesmas funções que o Enum, mas, em vez de gerar resultados intermediários, constrói uma série de computações que só são executadas quando o stream é passado para uma função do módulo Enum.

Streams implementam o protocolo Enumerable e são componíveis: você pode encadeá-los para criar funcionalidades mais complexas.

Instruções

Você é um grande fã do canal Numberphile no YouTube e acabou de ver um vídeo muito legal sobre a Sequência de Números de Lucas. Você quer criar essa sequência usando Elixir.

Ao projetar sua função, você quer usar avaliação preguiçosa, assim pode gerar quantos números quiser, mas só quando precisar. Então você decide usar um stream.

1. Capture argumentos inválidos

Adicione uma cláusula de guarda para lançar um erro se um valor não inteiro ou um inteiro menor que 1 for usado para gerar a sequência. Fazer isso como primeiro passo evita bugs de recursão infinita nos passos seguintes.

LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1

2. Gere os casos base

Você sabe que a sequência tem dois números iniciais que não seguem a mesma regra. Escreva duas cláusulas de caso base que retornem esses números:

LucasNumbers.generate(1)
# => [2]

LucasNumbers.generate(2)
# => [2, 1]

3. Crie o caso generalizado

Para qualquer sequência maior que 2, você sabe que precisa somar os dois números anteriores para obter o próximo número, e assim por diante. Escreva o caso generalizado.

LucasNumbers.generate(3)
# => [2, 1, 3]

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Editar via GitHub O link abre em uma nova janela ou aba
Elixir Exercism

Tudo pronto para começar Números de Lucas?

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