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

Números de Lucas

Exercício de aprendizagem

Introdução

Fluxos

Todas as funções do módulo Enum são ávidas. Quando fazes várias operações sobre enumeráveis com o módulo Enum, cada operação gera um resultado intermédio.

O módulo Stream é uma alternativa preguiçosa ao módulo Enum, que é ávido. Oferece muitas das mesmas funções que o Enum, mas, em vez de gerar resultados intermédios, constrói uma série de cálculos que só são executados quando o fluxo é passado a uma função do módulo Enum.

Os fluxos implementam o protocolo Enumerable e são componíveis. Podes encadeá-los para criar funcionalidades mais complexas.

Instruções

És um grande fã do canal de Youtube Numberphile e acabaste de ver um vídeo interessante sobre a Sequência de Números de Lucas. Queres criar esta sequência com Elixir.

Ao conceber a tua função, queres tirar partido da avaliação preguiçosa, para poderes gerar tantos números quantos quiseres, mas só se precisares. Por isso decides usar um stream.

1. Detetar argumentos inválidos

Adiciona uma cláusula de guarda para lançar um erro se for usado um valor que não seja um inteiro, ou um inteiro menor que 1, para gerar a sequência. Fazer isto como primeiro passo evita erros de recursão infinita em passos posteriores.

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

2. Gerar os casos base

Sabes que a sequência tem dois números iniciais que não seguem a mesma regra. Escreve duas cláusulas de caso base para devolver esses números:

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

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

3. Criar o caso generalizado

Para qualquer sequência com mais de 2 elementos, sabes que tens de somar os dois números anteriores para obter o número seguinte, e assim por diante. Escreve o caso generalizado.

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

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Editar via GitHub A ligação abre numa nova janela ou separador
Elixir Exercism

Estás pronto para começar Números de Lucas?

Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.