环境准备
在命令行输入,进入交互式环境
> stack ghci
配置开发环境请参考安装教程
生成列表
生成列表的方法有以下几种:
- 和其他语言一样,将数值或变量包装进列表
- 利用
[a_0 .. a_n]
方法生成序列 - 利用
[a_0,a_1 .. a_n]
方法生成等差数列 - 利用
a_0:a_1:a_2:[]
的方法生成数组 - 利用
a_0:a_1:a_2:[b_1,b_2,b_3]
的方法,将新数值加入到已有数组中。
ghci> --Haskell语言的注释写在两个减号后面
ghci> [1,2,3] --手动生成数组
[1,2,3]
ghci> [1..9] --生成一个整数序列
[1,2,3,4,5,6,7,8,9]
ghci> [1,4..10] --生成固定间隔的整数序列
[1,4,7,10]
ghci>[1,2.5..20]--生成固定间隔的浮点数序列
[1.0,2.5,4.0,5.5,7.0,8.5,10.0,11.5,13.0,14.5,16.0,17.5,19.0,20.5]
ghci> 1:2:3:[] --冒号包装
[1,2,3]
ghci> a=[1,2..10] --对变量赋值
ghci> a
[1,2,3,4,5,6,7,8,9,10]
字符串
单引号表示字符,而双引号表示字符串,字符串具有和数组类似的性质。
GHCi> ['h','e','l','l','o']
"hello"
GHCi> 'h':'e':'l':'l':'o':[]
"hello"
GHCi> 'h':"ello"
"hello"
GHCi> "h":"ello" --把字符串当作字符处理会报错
error
列表拼接
列表连接
使用++
符号可以将两个列表展开并连接,而使用a:b:[c]
方法则
ghci> a
[1,2,3,4]
ghci> b
[0.0,0.5,1.0,1.5,2.0,2.5,3.0]
ghci> a:b
ghci> a++b
[1.0,2.0,3.0,4.0,0.0,0.5,1.0,1.5,2.0,2.5,3.0]
ghci> a:b:[]
[[1.0,2.0,3.0,4.0],[0.0,0.5,1.0,1.5,2.0,2.5,3.0]]
ghci> [1,2,3]:[4,5,6]:[]
[[1,2,3],[4,5,6]]
ghci> "Hello"++" World"++"!"
"Hello World!"
ghci> 1:2:3:[]
[1,2,3]
数组索引和切片
索引方法
!!
操作符(!!)
函数
GHCi> [1,2,3] !! 0
1
GHCi> "puppies" !! 4
'i'
GHCi> (!!) [1,2,3] 0 -- 取第几位的元素
头尾函数
在head即取列表的头,tail即列表去头之后剩余的部分。
ghci> head [1,2,3,4]
1
ghci> tail [1,2,3,4]
[2,3,4]
切片函数
take
函数takeLast
函数subseq
函数dorp
函数
GHCi> take 5 [2,4..100] --取前几个元素
[2,4,6,8,10]
GHCi> take 3 "wonderful"
"won"
GHCi> take 1000000 [1]
[1]
GHCi> takeLast 10 [1..100] --取后几个元素
[91,92,93,94,95,96,97,98,99,100]
GHCi> subseq 2 5 [1 .. 10] --切片
[3,4,5]
GHCi> subseq 2 7 "a puppy"
"puppy"
GHCi> drop 2 [1,2,3,4,5]
[3,4,5]
GHCi> drop 5 "very awesome"
"awesome"
列表操作
- length :求长度
- reverse:翻转
- elem:判断元素是否属于列表
- zip:结合两个列表中的元素
GHCi> zip [1,2,3] [2,4,6]
[(1,2),(2,4),(3,6)]
GHCi> zip "dog" "rabbit"
[('d','r'),('o','a'),('g','b')]
GHCi> zip ['a' .. 'f'] [1 .. ]
[('a',1),('b',2),('c',3),('d',4),('e',5),('f',6)]