Haskell列表操作

环境准备

在命令行输入,进入交互式环境

> stack ghci

配置开发环境请参考安装教程

生成列表

生成列表的方法有以下几种:

  1. 和其他语言一样,将数值或变量包装进列表
  2. 利用[a_0 .. a_n] 方法生成序列
  3. 利用[a_0,a_1 .. a_n]方法生成等差数列
  4. 利用a_0:a_1:a_2:[] 的方法生成数组
  5. 利用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)]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高堂明镜悲白发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值