列表
基本概念
e.g.[1,2,3,4,5,6]
"hello" 是 ['h','e','l','l','o'] 的语法糖
在 ghci 下,我们可以使用 let 关键字来定义一个常量。在 ghci 下执行 let a = 1 与在脚本中编写 a = 1 是等价的。
列表是一种单类型的数据结构,可以用来存储多个类型相同的元素。我们可以在里面装一组数字或者一组字符,但不能把字符和数字装在一起。[1,2,'a',3,'b','c',4]是不符合规范的。
列表同样也可以用来装列表。
基本语法
++与,可以拼接两个列表,但是它会遍历第一个列表
: 可以在列表头部插入一个元素 1:[2,3],[1,2] 是 1:2:[] 的语法糖
!!索引,[1,2,3] !! 0 值为 1,索引越界会报错
>比较,它会先比较第一个元素,若它们的值相等,则比较下一个,[3, 2, 1] > [2, 1, 0] 值为 True
基本函数
head,tail,last,init,length,null,reverse,take,maximum,sum,elem
haskell ghci> head [5,4,3,2,1] //取头,head []报错
5
haskell ghci> tail [5,4,3,2,1] //去头
[4,3,2,1]
haskell ghci> last [5,4,3,2,1] //取尾
1
haskell ghci> init [5,4,3,2,1] // 去尾
[5,4,3,2]
haskell ghci> length [5,4,3,2,1] //长度
5
haskell ghci> null [1,2,3] //判断空
False
ghci> null []
True
haskell ghci> reverse [5,4,3,2,1] //倒置
[1,2,3,4,5]
haskell ghci> take 3 [5,4,3,2,1] //返回一个 List 的前几个元素,列表可带省略号
[5,4,3]
ghci> take 1 [3,9,3]
[3]
ghci> take 5 [1,2]
[1,2]
ghci> take 0 [6,6,6]
[]
haskell ghci> drop 3 [8,4,2,1,5,6] //返回一个 List 删掉前几个元素
[1,5,6]
ghci> drop 0 [1,2,3,4]
[1,2,3,4]
ghci> drop 100 [1,2,3,4]
[]
haskell ghci> minimum [8,4,2,1,5,6] //最小
1
ghci> maximum [1,9,2,3,4] //最大
9
haskell ghci> sum [5,2,1,6,3,2,5,7] //求和
31
ghci> product [6,2,1,2] //求积
24
ghci> product [1,2,5,6,7,9,2,0]
0
haskell ghci> 4 `elem` [3,4,5,6] //判断包含
True
ghci> 10 `elem` [3,4,5,6]
False
haskell ghci> take 10 (repeat 5)
[5,5,5,5,5,5,5,5,5,5]
haskell ghci> take 10 (cycle [1,2,3])
[1,2,3,1,2,3,1,2,3,1]
[1..20] 生成 1 到 20 这 20 个数字组成的列表
[2,4..20] 生成 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[20..1] 会得到空列表,应该写成 [20,19..1]
cycle [1, 2, 3] 会对列表进行无限循环,得到 1,2,3,1,2,3,1,2,3... 组成的列表
repeat 5 会得到由 5 组成的无限列表
repeat 3 10 会得到 [10,10,10]ake,maximum,sum,elem
head [] 报错
4 `elem` [3,4,5] 值为 True
[1..20] 生成 1 到 20 这 20 个数字组成的列表,[2,4..20] 生成 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20],[20..1] 会得到空列表,应该写成 [20,19..1],这种构造方法叫做Range,要避免在Range中使用浮点数
take 24 [13, 26..]
cycle [1, 2, 3] 会对列表进行无限循环,得到 1,2,3,1,2,3,1,2,3... 组成的列表
repeat 5 会得到由 5 组成的无限列表
repeat 3 10 会得到 [10,10,10]