轨道
/
Gleam
Gleam
/
练习
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

学习练习

简介

数组

在 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

准备好开始 Tracks on Tracks on Tracks 了吗?

注册 Exercism,借助 33 个概念122 个练习 和真人导师指导,学习并掌握 Gleam,全部免费。