배열은 Elixir 언어에 내장되어 있어요. 기본 타입으로 취급되며, 대괄호로 나타내요. 배열은 비어 있을 수도 있고, 어떤 타입의 항목이든 원하는 개수만큼 담을 수도 있어요. 예를 들어:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
Elixir는 배열을 연결 리스트로 구현하는데, 각 노드는 두 개의 값을 저장해요. 첫 번째 항목과, 나머지 항목을 모두 담은 또 다른 배열이에요. 배열의 첫 번째 항목을 _헤드_라고 하고, 나머지 항목으로 이루어진 배열을 _테일_이라고 해요. 이 표기는 코드에서 이렇게 쓸 수 있어요:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
[head | tail] 표기를 사용하면 배열의 앞에 원소를 추가할 수 있어요:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Kernel 모듈에는 배열을 다루는 함수가 여러 개 있고, List 모듈 전체에도 그런 함수가 있어요.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
이 연습 문제에서는 프로그래밍 언어 배열을 다루는 함수 몇 개를 구현해야 해요.
인자를 받지 않고 빈 배열을 반환하는 new/0 함수를 정의해요.
LanguageList.new()
# => []
인자 2개(언어 배열과 언어의 문자열 리터럴)를 받는 add/2 함수를 정의해요. 주어진 배열의 맨 앞에 새 언어를 추가한 배열을 반환해야 해요.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
인자 1개(언어 배열)를 받는 remove/1 함수를 정의해요. 첫 번째 항목이 없는 배열을 반환해야 해요. 배열에는 항상 항목이 최소한 하나는 있다고 가정해요.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
language_list = LanguageList.remove(language_list)
# => ["Clojure"]
인자 1개(언어 배열)를 받는 first/1 함수를 정의해요. 배열의 첫 번째 언어를 반환해야 해요. 배열에는 항상 항목이 최소한 하나는 있다고 가정해요.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.first(language_list)
# => "Prolog"
인자 1개(언어 배열)를 받는 count/1 함수를 정의해요. 배열에 있는 언어의 개수를 반환해야 해요.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.count(language_list)
# => 2
인자 1개(언어 배열)를 받는 functional_list?/1 함수를 정의해요. 불리언 값을 반환해야 해요. _"Elixir"_가 배열에 있는 언어 중 하나라면 true를 반환해야 해요.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.