第1章 何谓函数式程序设计 1
1.1 函数和类型 1
1.2 函数复合 2
1.3 例子:高频词 2
1.4 例子:数字转换为词 5
1.5 Haskell平台 8
1.6 习题 9
1.7 答案 11
1.8 注记 13
第2章 表达式、类型和值 15
2.1 GHCi会话 15
2.2 名称和运算符 17
2.3 求值 18
2.4 类型和类族 20
2.5 打印值 22
2.6 模块 24
2.7 Haskell版面 24
2.8 习题 25
2.9 答案 29
2.10 注记 32
第3章 数 33
3.1 类族Num 33
3.2 其他数值类族 33
3.3 取底函数的计算 35
3.4 自然数 37
3.5 习题 39
3.6 答案 40
3.7 注记 41
第4章 列表 42
4.1 列表记法 42
4.2 枚举 43
4.3 列表概括 43
4.4 一些基本运算 45
4.5 串联 46
4.6 函数cancat、 map和filter 46
4.7 函数zip和zipWith 49
4.8 高频词的完整解 50
4.9 习题 52
4.10 答案 55
4.11 注记 58
第5章 一个简单的数独求解器 59
5.1 问题说明 59
5.2 合法程序的构造 63
5.3 修剪选择矩阵 64
5.4 格子的扩展 67
5.5 习题 70
5.6 答案 71
5.7 注记 72
第6章 证明 73
6.1 自然数上的归纳法 73
6.2 列表归纳法 74
6.3 函数foldr 78
6.4 函数foldl 81
6.5 函数scanl 83
6.6 最大连续段和问题 84
6.7 习题 87
6.8 答案 90
6.9 注记 96
第7章 效率 97
7.1 惰性求值 97
7.2 空间的控制 100
7.3 运行时间的控制 103
7.4 时间分析 104
7.5 累积参数 106
7.6 元组 109
7.7 排序 112
7.8 习题 115
7.9 答案 117
7.10 注记 120
第8章 精美打印 121
8.1 问题背景 121
8.2 文档 122
8.3 一种直接实现 125
8.4 例子 126
8.5 最佳格式 128
8.6 项表示 129
8.7 习题 133
8.8 答案 135
8.9 注记 139
第9章 无穷列表 140
9.1 复习 140
9.2 循环列表 141
9.3 作为极限的无穷列表 143
9.4 石头-剪刀-布 147
9.5 基于流的交互 151
9.6 双向链表 152
9.7 习题 154
9.8 答案 156
9.9 注记 158
第10章 命令式函数式程序设计 159
10.1 IO单子 159
10.2 更多的单子 162
10.3 状态单子 165
10.4 ST单子 167
10.5 可变数组 169
10.6 不变数组 173
10.7 习题 175
10.8 答案 178
10.9 注记 183
第11章 句法分析 184
11.1 单子句法分析器 184
11.2 基本分析器 186
11.3 选择与重复 187
11.4 语法与表达式 190
11.5 显示表达式 192
11.6 习题 194
11.7 答案 196
11.8 注记 198
第12章 一个简单的等式计算器 199
12.1 基本思想 199
12.2 表达式 203
12.3 定律 206
12.4 计算 208
12.5 重写 210
12.6 匹配 211
12.7 代换 213
12.8 测试计算器 214
12.9 习题 221
12.10 答案 222
12.11 注记 224
索引 225