第1章 函数式程序设计简介
1.1 计算机与建模
1.2 什么是函数
1.3 图形与函数
1.4 类型
1.5 函数式程序设计语言Haskell
1.6 表达式与计算
1.7 定义
1.8 函数定义
1.9 类型与函数式程序设计
1.10 计算与求值
1.11 函数式程序设计的精髓
1.12 领域专用语言
1.13 图形的两种模型.
1.14 测试、性质和证明
第2章 认识Haskell与GHCi
2.1 第一个Haskell程序
2.2 在工作中使用Haskell
2.3 使用GHCi
2.4 标准库Prelude和Haskell函数库
2.5 模块
2.6 例子:Pictures
2.7 错误与错误信息
第3章 基本类型与定义
3.1 布尔类型Bool
3.2 整数类型:Integer和Int
3.3 重载
3.4 守卫
3.5 字符和串
3.6 浮点数Float
3.7 语法
第4章 设计与书写程序
4.1 如何开始一个Haskell程序的设计
4.2 逐步求解问题:局部定义
4.3 自定义类型:枚举类型
4.4 递归
4.5 实践中的原始递归
4.6 扩展练习:图形.
4.7 递归的一般形式
4.8 程序测试.
第5章 数据类型、多元组与列表
5.1 多元组和列表简介
5.2 元组类型
5.3 代数类型简介
5.4 本书对列表的介绍方法
5.5 Haskell的列表
5.6 列表概括
5.7 图书馆数据库
第6章 列表程序设计.
6.1 通用函数:多态
6.2 Haskell引导库Prelude中的列表函数
6.3 认识Haskell函数库
6.4 Picture例子的实现
6.5 扩展练习:图形的另一种实现
6.6 扩展练习:有位置的图形
6.7 扩展练习:超市账单
6.8 扩展练习:纸牌和纸牌游戏
第7章 定义列表上的函数
7.1 再谈模式匹配
7.2 列表与列表模式
7.3 列表上的原始递归
7.4 寻找原始递归定义
7.5 列表上的一般递归
7.6 例子:文本处理
第8章 游戏:Haskell的I/O
8.1 石头-剪刀-布的策略
8.2 为什么I/O是一个问题
8.3 输入/输出
8.4 do语法
8.5 迭代与递归
8.6 石头-剪刀-布:玩游戏
第9章 程序推理
9.1 理解定义
9.2 测试与证明
9.3 定义性、终止性和有限性
9.4 一些逻辑知识
9.5 归纳法
9.6 归纳证明的进一步例子
9.7 推广证明目标
第10章 推广:计算模型
10.1 列表上的计算模式
10.2 高阶函数:函数作为参数
10.3 折叠与原始递归
10.4 推广:拆分列表
10.5 再谈实例
第11章 高阶函数
11.1 运算:函数的复合和应用
11.2 函数的表达式:λ抽象
11.3 部分应用
11.4 卡瑞式函数
11.5 定义高阶函数
11.6 验证与通用函数
第12章 高级程序开发
12.1 再谈Picture
12.2 函数作为数据:策略组合子
12.3 函数作为数据:正则表达式匹配
12.4 函数作为数据的实例
12.5 例子:建立索引
12.6 实践中的程序开发
12.7 理解程序
第13章 重载,类族和类型检测
13.1 为什么使用重载?
13.2 引进类族
13.3 签名和实例
13.4 Haskell的预定义类族
13.5 类型检测和类型推导概述
13.6 单态类型检测
13.7 多态类型检测
13.8 类型检测与类族
第14章 代数类型
14.1 代数类型回顾
14.2 递归代数类型
14.3 多态代数类型
14.4 程序错误的表示
14.5 使用代数类型设计系统
14.6 代数类型与类族
14.7 代数类型的推理
第15章 实例研究:Hu.man编码
15.1 Haskell的模块
15.2 模块设计
15.3 编码与译码
15.4 实现一
15.5 构造Hu.man树
15.6 设计
15.7 实现二
第16章 抽象数据类型
16.1 类型表示
16.2 Haskell抽象数据类型机制
16.3 队列
16.4 设计
16.5 仿真
16.6 实现仿真
16.7 查找树
16.8 集合
16.9 关系和图
16.1 0评注
第17章 惰性计算
17.1 惰性计算
17.2 计算规则与惰性计算
17.3 再谈列表概括
17.4 数据导向编程
17.5 实例:分析表达式
17.6 无穷列表
17.7 为什么使用无穷列表
17.8 实例:仿真
17.9 再谈证明
第18章 单子程序设计
18.1 输入/输出程序
18.2 深入I/O
18.3 计算器
18.4 再谈do记法
18.5 单子:为函数式程序设计定制的语言
18.6 例子:树上的单子式计算
第19章 领域专用语言
19.1 程序语言无处不在
19.2 为什么在Haskell中嵌入DSL?
19.3 浅嵌入和深嵌入
19.4 处理正则表达式的DSL
19.5 单子式DSL
19.6 表示计算的DSL:QuickCheck中的数据生成
19.7 深入DSL
第20章 时间与空间行为
20.1 函数的复杂度
20.2 计算的复杂度
20.3 集合的实现.
20.4 空间行为
20.5 再谈折叠
20.6 避免重复计算:记忆
第21章 结论
21.1 函数式程序设计的威力
21.2 深入Haskell
21.3 网络上的Haskell
21.4 其他函数式程序设计语言
附录A 函数式,命令式和OO程序设计
A.1 值与状态
A.2 函数与变量
A.3 程序验证
A.4 记录和元组
A.5 列表和指针
A.6 高阶函数
A.7 多态
A.8 定义类型与类族
A.9 列表概括
A.10 惰性计算
A.11 状态,无穷列表和单子
A.12 结论
附录B 术语解释
附录C Haskell运算符
附录D Haskell实践
D.1 实现
D.2 下载Craft3e代码
D.3 使用GHCi
D.4 Haskell编辑器
附录E GHCi错误
E.1 语法错误
E.2 类型错误
E.3 程序错误
E.4 模块错误
E.5 系统信息
附录F 项目建设
F.1 游戏与智力测验
F.2 Web图形
F.3 逻辑
F.4 投票系统
F.5 有穷自动机
F.6 领域专用语言
参考文献
索引
^ 收 起