學習軌道
/
Elixir
Elixir
/
練習
/
語言清單
語言清單

語言清單

學習練習

簡介

陣列

陣列是 Elixir 語言內建的資料結構。它們被視為一種基本型別,以方括號表示。陣列可以是空的,也可以存放任意數量的項目,項目可以是任何型別。例如:

empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]

Elixir 將陣列實作成連結陣列,其中每個節點儲存 2 個值:第一個項目,以及包含其餘所有項目的另一個陣列。陣列中的第一個項目稱為_頭_,其餘項目組成的陣列則稱為_尾_。我們可以在程式碼中使用這種表示法:

# [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

說明

在這個練習中,你需要實作一些函式,來操作程式語言的陣列。

1. 定義一個回傳空語言陣列的函式

定義new/0函式,它不接受任何引數,並回傳一個空陣列。

LanguageList.new()
# => []

2. 定義一個將語言加入陣列的函式

定義add/2函式,它接受 2 個引數(一個_語言陣列_,以及一個代表_語言_的字串常值)。它應該回傳把新語言加在給定陣列最前面所得到的陣列。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]

3. 定義一個從陣列移除語言的函式

定義remove/1函式,它接受 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"]

4. 定義一個回傳陣列中第一個項目的函式

定義first/1函式,它接受 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"

5. 定義一個回傳陣列中語言數量的函式

定義count/1函式,它接受 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

6. 定義一個判斷陣列是否包含函式語言的函式

定義functional_list?/1函式,它接受 1 個引數(一個_語言陣列_)。它應該回傳一個布林值。如果_"Elixir"_是陣列中的其中一個語言,它應該回傳 true。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 語言清單 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。