Haskell系列(三)列表

323 阅读3分钟

列表

基本概念

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]