第一个小函数
在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