haskell--Learn You a Haskell for Great Good

 

 

1 简单算数

Prelude> 1 + 2
3
Prelude> (1+3)*(2+5)
28
Prelude> 5 * (-2)
-10

2 Boolean 代数

Prelude> True && False
False
Prelude> False || True
True
Prelude> not False
True

3 测试相等

Prelude> "hello" == "hello"
True
Prelude> "a" /= "b"
True
Prelude> 1 /= 2
True

4 函数调用(使用内置函数)

不需要括号,括号用来改变优先级

Prelude> succ 100
101
Prelude> succ 1
2
Prelude> min 1 100
1
Prelude> max 1 100
100

5 函数优先级很高(有限结合)

Prelude> succ 5 * 10 * 10
600
Prelude> succ (5 * 10) * 10
510

6 使用反引号的中缀函数

Prelude> div 92 10
9
Prelude> 92 `div` 10
9

7 多次调用同一函数

调用参数只有一个

Prelude> succ (succ 110)
112

8 函数定义

 

8.1 无参数

size = 123

8.2 带参数

add a b = a + b

8.3 没有顺序要求(前面定义的也可以调用后面的函数)

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

9 列表

 

9.1 ++ 操作符

λ> [1,2] ++ [1,3]
[1,2,1,3]
λ> "ab" ++ "12"
"ab12"

9.2 :操作符

λ> 'a':"123"
"a123"
λ> 1:[2,1]
[1,2,1]

9.3 列表语法糖(前面的是语法糖)和本质

λ> [1,2,3,4]
[1,2,3,4]
λ> 1:2:3:4:[]
[1,2,3,4]

9.4 取下标对应的数据

λ> "123456" !! 3
'4'

9.5 列表包含列表

列表中的同级元素要相似(如:同级元素是列表且元素都是整数,不能有其他类型)

λ> let a = [[1], [2,3]]
λ> a
[[1],[2,3]]

9.6 列表比较

默认使用字典比较每一个元素

λ> let a = [10];
λ> let b = [1, 2];
λ> a > b
True

10 操作列表的基本函数

 

10.1 获取第一个元素

λ> head [ 2, 1, 3]
2

10.2 去除首元素

λ> tail [2, 1, 3]
[1,3]

10.3 获取最后一个元素

λ> last [2, 1, 3]
3

10.4 去除最后一个元素

λ> init [2, 1, 3]
[2,1]

10.5 head last init tail 不能作用在空列表上(编译通过,运行发生错误)

λ> head []
** Exception: Prelude.head: empty list

10.6 列表长度

λ> length [2, 1, 3]
3

10.7 反转列表

λ> reverse [1, 1, 3]
[3,1,1]

10.8 从首元素开始,提取指定个数的元素

λ> let a = [1, 2, 3, 4, 5]
λ> take 2 a
[1,2]
λ> take 8 a
[1,2,3,4,5]
λ> take 0 a
[]

10.9 从首元素开始,删除指定个数的元素

λ> let a = [2, 1, 5, 4, 3]
λ> drop 3 a
[4,3]
λ> drop 0 a
[2,1,5,4,3]
λ> drop 10 a
[]

10.10 获取可以排序的列表的最大最小值

λ> let a = [1, 3, 2, 5]
λ> maximum a
5
λ> minimum a
1

10.11 计算列表的总和和乘积

λ> let a = [0, 1, 2, 3]
λ> sum a
6
λ> product a
0
λ> product [2, 3]
6

10.12 判断是否是列表中的元素

λ> let a = [1, 2, 3]
λ> 2 `elem` a
True
λ> 10 `elem` a
False

11 ranges

数字和字符序列,也可以使用差值

11.1 简单使用

λ> [1..10]
[1,2,3,4,5,6,7,8,9,10]
λ> [2,5..20]
[2,5,8,11,14,17,20]
λ> ['c'..'z']
"cdefghijklmnopqrstuvwxyz"
λ> ['c', 'h'..'z']
"chmrw"

11.2 逆序

λ> [10, 8..1]
[10,8,6,4,2]

11.3 获取指定个数的两种方式

λ> [10, 20..10 * 10]
[10,20,30,40,50,60,70,80,90,100]
λ> take 10 [10, 20..]
[10,20,30,40,50,60,70,80,90,100]

11.4 获取指定个数循环列表内的元素(列表内的元素无限循环)

λ> take 5 (cycle [1, 2, 3])
[1,2,3,1,2]

11.5 获取指定个数的单个元素的两种方式(推荐用函数的方式)

λ> take 10 (repeat 10)
[10,10,10,10,10,10,10,10,10,10]
λ> replicate 6 10
[10,10,10,10,10,10]

12 集合

 

12.1 一个条件

λ> [3*x | x <- [1..7]]
[3,6,9,12,15,18,21]

12.2 多个条件

12.3 使用余数

λ> [x | x <- [50..100], x `mod` 7 == 3]
[52,59,66,73,80,87,94]

12.4 奇数

是奇数,小于10则xxx,否则xxx

λ> let str set = [if x < 10 then "odd" else "even" | x <- set, odd x]
λ> str [6..13]
["odd","odd","even","even"]

12.5 多个列表组合

λ> [x*y|x<-[1..3],y<-[1..3]]
[1,2,3,2,4,6,3,6,9]

12.6 计算长度

λ> let len list = sum [1|_<-list]
λ> len [1..5]
5
λ> len [1..8]
8

12.7 使用字符串

λ> let filter str = [ch | ch <- str,  ch `elem` ['A'..'Z']]
λ> filter "Welcome, Hello, World!"
"WHW"

12.8 嵌套集合

λ> let xxs = [[1,4..10], [1..10]]
λ> [[x|x<-xs, odd x, x > 3] | xs<-xxs]
[[7],[5,7,9]]

Created: 2019-12-20 周五 19:25

Validate

posted @ 2019-12-20 19:28  heidekeyi  阅读(225)  评论(0编辑  收藏  举报