Numberphile 유튜브 채널의 열렬한 팬이라면, 방금 _루카스 수열_에 관한 멋진 영상을 봤을 거예요. 이 수열을 Elixir로 만들어 보고 싶을 거예요.
함수를 설계할 때는 _지연 평가_를 활용해서 원하는 만큼의 숫자를 생성하되, 정말 필요할 때만 생성하고 싶을 거예요. 그래서 스트림을 사용하기로 해요.
수열을 생성할 때 정수가 아닌 값이나 1보다 작은 정수를 사용하면 오류를 발생시키도록 가드 절을 추가해요. 이걸 첫 단계에서 해두면 뒤 단계에서 생길 수 있는 무한 재귀 오류를 막을 수 있어요.
LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1
이 수열에는 같은 규칙을 따르지 않는 두 개의 시작 숫자가 있다는 걸 알고 있어요. 이 숫자들을 반환하는 기본 사례 절 두 개를 작성해요.
LucasNumbers.generate(1)
# => [2]
LucasNumbers.generate(2)
# => [2, 1]
길이가 2보다 긴 수열에서는 이전 두 숫자를 더해서 다음 숫자를 구하고, 이를 계속 반복해야 한다는 걸 알고 있어요. 일반화된 사례를 작성해요.
LucasNumbers.generate(3)
# => [2, 1, 3]
LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.