操作list的几个基础函数

发布时间 2023-04-01 01:38:15作者: 牧羊龟

第一个小函数

在Haskell中,函数通过输入名称、空格和参数(用空格分隔)来调用,例如

succ 8
min 9 10
min 3.4 3.2
max 100 101

函数的调用(通过在函数后面加空格然后写入其参数来调用函数)具有最高的优先级
例如,下面两行代码是等价的

succ 9 + max 5 4 + 1
(succ 9) + (max 5 4) + 1

在Haskell中,空格是用来调用函数的

函数的定义与调用类似,函数名后面跟着用空格分隔的参数,但定义函数时有一个 =,后面定义函数的功能,例如

doubleMe x = x + x
doubleUs x y = doubleMe x + doubleMe y

在Haskell中,每个表达式或函数必须返回一个值,例如

doubleSmallNumber x = if x > 100 then x else x * 2

函数的名字不能以大写字母开头

不带任何参数的函数也称为definition定义,例如

muyang'ui = "hello, it's me, muyangui"

对list的介绍

在Haskell中,list是homogeneous同构数据结构,存储相同类型的多个项

"hello" 只是 ['h','e','l','l','o'] 的一种语法替代,字符串只是字符的list,我们可以对其使用list操作的函数,这非常有用

++操作符,连接两个list

[1, 2, 3, 4] ++ [9, 10, 11, 12]
"hello" ++ " " ++ "world"
['h', 'e', 'l'] ++ ['l', 'o']

当连接两个list时,Haskell内部必须从 ++操作符的左侧遍历整个list,在连接大的list时需要一段时间

:操作符,将一个项添加到list的开头

'a' : "black cat"
0 : [1, 2, 3, 4, 5]
1 : 2 : 3 : []

[1,2,3]是1 :2 :3 :[]的语法替代

!! 操作符,从list中获取一个已知其索引的项,索引从0开头

"hello world" !! 4
[1, 2, 4, 5, 6, 7, 3, 9, 8] !! 5

当在只有4项的list中获取第6项时,将得到一个错误,所以要小心

操作list的几个基本函数

head,tail,last,init

head返回list的第一个元素

head [1, 2, 3, 4, 5]
1

tail返回list除了第一个元素的list

tail [1, 2, 3, 4, 5]
[2, 3, 4, 5]

last返回list的最后一个元素

last [1, 2, 3, 4, 5]
5

init返回list除了最后一个元素的list

init [1, 2, 3, 4, 5]
[1, 2, 3, 4]

当使用head,tail,last,init时,注意不要使用空列表

length 返回list的大小

length [1, 2, 3, 4, 5 ,6]
6

null 检查list是否为空,如果为空,则返回True,否则返回False

null [1, 2, 3]
False
null []
True

reverse 反转list

reverse [1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

take 接受一个数字和一个list,并从list开头提取该数量的元素,返回list

take 3 [1, 2, 3, 4, 5]
[1, 2, 3]
take 1 [2, 4, 5]
[2]
take 6 [3, 4]
[3, 4]
take 0 [1, 2, 3, 4, 5]
[]

drop 接受一个数字和一个list,并从list开头删除该数量的元素,返回list

drop 3 [1, 2, 3, 4, 5, 6]
[4, 5, 6]
drop 0 [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
drop 100 [1, 2, 3, 4]
[]

minimum, maximun 接受一个可以按某种顺序排列的list,并返回最小、最大的元素

minimum [8, 3, 4, 5, 2, 7, 6, 1]
1
maximum [8, 3, 4, 5, 2, 7, 6, 1]
8

sum 接受一个数字list,并返回它们元素的和

sum [5, 2, 1, 6, 3, 2, 5, 7]
31
sum [1.1, 2.2, 3.3. 4.4]
11.0

product 接受一个数字list,并返回它们元素的积

product [6, 2, 1, 2]
24
product [1, 2, 4, 6, 7, 0]
0

elem 接受一个元素和一个list,判断这个元素是否是list中的元素,如果是返回True,否则返回False

elem 4 [3, 4, 5, 6]
True
elem 6 [1, 2, 3, 4]
False

接受两个形参的函数,也称为中缀函数(infix function)可以写成如下形式,更明显清楚

4 `elem` [3, 4, 5, 6]
9 `div` 3