Elm 中的List是一种不可变的集合,包含零个或多个同一类型的值。
数组可以这样定义:
empty = []
singleValue = [ 5 ]
threeValues = [ "a", "b", "c" ]
向数组中添加元素最常见的方式,是使用::(cons)运算符:
twoToFour = [ 2, 3, 4 ]
oneToFour = 1 :: twoToFour --> [ 1, 2, 3, 4 ]
数组通过定义在 List 模块 中的函数和运算符来操作,也可以通过模式匹配来操作:
describe : List String -> String
describe list =
case list of
[] ->
"Empty list"
[ "hello" ] ->
"Singleton list with: hello"
x :: xs ->
"Non-empty list with head: " ++ x
describe [] --> "Empty list"
describe [ "hello" ] --> "Singleton list with: hello"
describe [ "hello", "world" ] --> "Non-empty list with head: hello"
在这个练习中,你将编写代码,记录你想在 Exercism 上学习的编程语言数组。 本练习共有六个任务,每个任务都涉及数组。
为了记录你想学习的编程语言,你需要创建一个新数组。
定义 newList 常量,让它包含一个新的空数组。
newList
--> []
目前,你手上有一张纸,上面列出了你想学习的编程语言:Elm、Clojure 和 Haskell。
定义 existingList 常量来表示这个数组。
existingList
--> [ "Elm", "Clojure", "Haskell" ]
当你在 Exercism 上探索、发现更多有趣的语言时,你会想把它们加到数组里。
实现 addLanguage 函数,把一门新语言添加到数组的开头。
addLanguage "TypeScript" [ "JavaScript", "CoffeeScript" ]
--> [ "TypeScript", "JavaScript", "CoffeeScript" ]
手动数语言的数量很不方便。
实现 countLanguages 函数,统计数组中语言的数量。
countLanguages [ "C#", "Racket", "Rust", "Ruby" ]
--> 4
某一天你会发现,数组的顺序其实是反的!
实现 reverseList 函数,把数组反转过来。
reverseList [ "Prolog", "C", "Idris", "Assembly" ]
--> [ "Assembly", "Idris", "C", "Prolog" ]
虽然你热爱所有语言,但 Elm 在你心中有特殊的地位。 因此,只要满足以下条件,你就会对一份编程语言数组感到非常兴奋:
实现 excitingList 函数,检查一个编程语言数组是否令人兴奋:
excitingList [ "Nim", "Elm" ]
--> True