内容简介
第Ⅰ部分 函数式程序设计引言
第1章 函数式程序设计简史
1.1函数式程序设计简介
1.2函数式程序设计语言
1.3与面向对象程序设计的关系
1.4小结
第2章 函数式程序设计思想在现代项目中的应用
2.1控制副作用
2.2敏捷开发方法
2.3声明式程序设计
2.4函数式程序设计的定向思维
2.5用C#实现函数式程序设计的可行性
2.6小结
第Ⅱ部分C#函数式程序设计基础
第3章 函数、委托和Lambda表达式
3.1函数与方法
3.2重用函数
3.3匿名函数与Lambda表达式
3.4扩展方法
3.5引用透明
3.6小结
第4章 泛型
4.1泛型函数
4.2泛型类
4.3约束类型
4.4其他泛型类型
4.5协变与逆变
4.6小结
第5章惰性列表工具——迭代器
5.1什么是惰性
5.2用.NET方法枚举元素
5.3迭代器函数的实现
5.4链式迭代器
5.5小结
第6章 用闭包封装数据
6.1动态创建函数
6.2作用域存在的问题
6.3闭包的工作机制
6.4小结
第7章 代码即数据
7.1 .NET中的表达式树
7.2分析表达式
7.3生成表达式
7.4 .NET 4.0特性
7.5小结
第Ⅲ部分用C#实现常用的函数式设计技术
第8章 局部套用与部分应用
8.1参数的解耦
8.1.1手动局部套用
8.1.2自动局部套用
8.1.3调用局部套用函数
8.1.4类上下文
8.1.5 FCSlib库的内容
8.2调用函数的各部分
8.3参数顺序的重要性
8.4小结
第9章 惰性求值
9.1惰性求值的优点
9.2传递函数
9.3显式的惰性求值
9.4惰性求值方法的比较
9.4.1可用性
9.4.2效率
9.5惰性求值方法的选择
9.6小结
第10章 缓存技术
10.1记住以前结果的重要性
10.2预计算
10.3缓存
10.3.1深度缓存
10.3.2缓存的几个考虑因素
10.4小结
第11章 递归调用
11.1 C#中的递归
11.2尾递归
11.3累加器传递模式
11.4后继传递模式
11.5间接递归
11.6小结
第12章 标准高阶函数
12.1应用运算:Map
12.2使用筛选条件:Filter
12.3累加操作:Fold
12.4 LINQ中的Map、Filter和Fold
12.5标准高阶函数
12.6小结
第13章 序列
13.1何为列表推导
13.2用函数方法实现迭代器
13.3值域
13.4限制
13.5小结
第14章 由函数构建函数
14.1组合函数
14.2高级的部分应用
14.3各种方法的综合
14.4小结
第15章 可选值
15.1空值的含义
15.2可选值的实现
15.3小结
第16章 防止数据变化
16.1变化不总是件好事
16.2错误的假定
16.2.1静态数据受欢迎
16.2.2深度问题
16.2.3克隆
16.2.4自动克隆
16.3实现不可变容器数据类型
16.3.1链表
16.3.2队列
16.3.3非平衡的二叉树
16.3.4红黑树
16.4持久数据类型的替代选择
16.5小结
第17章 单子
17.1类型类的概念
17.2单子的概念
17.3使用抽象的原因
17.4 Logger单子
17.5含糖语法
17.6用SelectMany方法建立绑定
17.7小结
第Ⅳ部分 函数式设计的实际应用
第18章 函数式程序设计技术的综合应用
18.1重构
18.1.1用Windows Forms UI实现列表筛选
18.1.2 Mandelbrot分形计算
18.2编写新代码
18.2.1使用静态方法
18.2.2优先考虑匿名函数
18.2.3优先考虑高阶函数
18.2.4优先考虑不可变数据
18.2.5注意类中行为的实现
18.3寻找可以替代函数式设计的其他方法
18.3.1其他需要考虑的问题
18.3.2使用已有代码
18.4小结
第19章MapReduce模式
19.1 MapReduce的实现
19.2问题的抽象
19.3小结
第20章 函数模块化思想的应用
20.1在应用程序中执行SQL代码
20.2用部分应用和预计算重写函数
20.3小结
第21章 函数式技术在现有项目中的应用
21.1 .NET Framework
21.2 LINQ
21.2.1 LINQ to Objects
21.2.2 LINQ到查询后台
21.2.3并行化
21.3 Google MapReduce及其实现
21.4 NUnit
21.5小结