트랙
/
Elixir
Elixir
/
연습 문제
/
루카스 수
루카스 수

루카스 수

학습 연습 문제

소개

스트림

Enum 모듈의 모든 함수는 즉시 실행 방식이에요. Enum 모듈로 열거 가능한 값에 여러 연산을 수행하면, 각 연산은 중간 결과를 만들어내요.

Stream 모듈은 즉시 실행 방식인 Enum 모듈을 대신하는 지연 실행 방식이에요. Enum 모듈과 같은 함수를 많이 제공하지만, 중간 결과를 만드는 대신 스트림이 Enum 모듈의 함수에 전달되고 나서야 실행되는 일련의 계산을 구성해요.

스트림은 Enumerable 프로토콜을 구현하고, 조합할 수 있어요. 스트림을 서로 이어 붙여서 더 복잡한 기능을 만들 수 있어요.

지침

Numberphile 유튜브 채널의 열렬한 팬이라면, 방금 _루카스 수열_에 관한 멋진 영상을 봤을 거예요. 이 수열을 Elixir로 만들어 보고 싶을 거예요.

함수를 설계할 때는 _지연 평가_를 활용해서 원하는 만큼의 숫자를 생성하되, 정말 필요할 때만 생성하고 싶을 거예요. 그래서 스트림을 사용하기로 해요.

1. 잘못된 인자 걸러내기

수열을 생성할 때 정수가 아닌 값이나 1보다 작은 정수를 사용하면 오류를 발생시키도록 가드 절을 추가해요. 이걸 첫 단계에서 해두면 뒤 단계에서 생길 수 있는 무한 재귀 오류를 막을 수 있어요.

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

2. 기본 사례 생성하기

이 수열에는 같은 규칙을 따르지 않는 두 개의 시작 숫자가 있다는 걸 알고 있어요. 이 숫자들을 반환하는 기본 사례 절 두 개를 작성해요.

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

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

3. 일반화된 사례 만들기

길이가 2보다 긴 수열에서는 이전 두 숫자를 더해서 다음 숫자를 구하고, 이를 계속 반복해야 한다는 걸 알고 있어요. 일반화된 사례를 작성해요.

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

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elixir Exercism

루카스 수 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.