學習軌道
/
Gleam
Gleam
/
練習
/
清單上的清單上的清單
清單上的清單上的清單

清單上的清單上的清單

學習練習

簡介

陣列

Gleam 中的陣列是不可變的集合,可容納零個或多個值。陣列中的值必須全部具有相同的型別。由於陣列是不可變的,一旦建立後,它的值就永遠不會改變。任何看似會修改陣列的函式或運算子(例如新增元素),實際上都會回傳一個新的陣列。

陣列可以這樣定義:

let empty = []
let singleValue = [5]
let threeValues = ["a", "b", "c"]

將元素加入陣列最常見的方式是使用展開語法:

let two_to_four = [2, 3, 4]
let one_to_four = [1, ..two_to_four]
// -> [1, 2, 3, 4]

Gleam 標準函式庫中的 gleam/list 模組包含許多處理陣列的實用函式。這個模組在 Gleam 程式碼中非常常用,所以熟悉它很有幫助。

陣列模式可以用在 case 運算式中,比對陣列並將其中包含的值指定給變數:

pub fn describe(list: List(String)) -> String {
  case list {
    [] -> "Empty list"
    [x] -> "List with one item: " <> x
    [x, y] -> "List with two items: " <> x <> " and " <> y
    _ -> "List with three or more items"
  }
}

除了比對確切長度的陣列之外,展開語法也可以用來比對至少有某個長度的陣列:

pub fn describe(list: List(String)) -> String {
  case list {
    [_, _, ..] -> "List with at least two items"
    [_] -> "List with one item"
    [] -> "Empty list"
  }
}

展開語法也可以用來將陣列其餘的部分指定給一個變數:

pub fn remove_first_item(list: List(String)) -> List(String) {
  case list {
    // Return the list without the first item
    [_, ..rest] -> rest

    // There's no first item to remove, return an empty list
    _ -> []
  }
}

case 運算式應該為被比對型別的每個可能值都有一個模式,因此通常會用最後的丟棄模式(_)來處理剩下的任何值。

說明

在這個練習中,你將撰寫程式碼,追蹤你在 Exercism 上想學習的程式語言陣列。

這個練習有六個任務,全都和處理陣列有關。

1. 建立新的陣列

為了追蹤你想學習的程式語言,你需要建立一個新的陣列。定義new_list函式,回傳一個全新的空陣列。

new_list()
// -> []

2. 定義既有的陣列

目前你有一張紙,上面寫著你想學習的程式語言:Gleam、Go 和 TypeScript。定義existing_list函式來回傳這個陣列。

existing_list()
// -> ["Gleam", "Go", "TypeScript"]

3. 在陣列中加入新的程式語言

當你在 Exercism 上探索,發現更多有趣的程式語言時,你會想把它們加進你的陣列。實作add_language函式,把新的程式語言加到陣列的最前面。

add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]

4. 計算陣列中的程式語言數量

一個一個數程式語言很不方便。實作count_languages函式,計算陣列中有多少個程式語言。

count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4

5. 反轉陣列

某個時刻,你會發現你的陣列其實是反過來的!實作reverse_list函式來反轉你的陣列。

reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]

6. 檢查陣列是否令人興奮

雖然你喜歡所有的程式語言,但 Gleam 在你心中有個特別的位置。因此,如果符合以下條件,你就會對一串程式語言感到非常興奮:

  • 陣列中的第一個是 Gleam。
  • 陣列中的第二個項目是 Gleam,且該陣列包含兩個或三個程式語言。

實作exciting_list函式,檢查一串程式語言是否令人興奮:

exciting_list(["Lua", "Gleam"])
// -> True
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Gleam Exercism

準備好開始 清單上的清單上的清單 了嗎?

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