《C#与F#编程实践》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(捷克)佩特里切克,(英)斯基特著;贾洪峰译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2011
  • ISBN:9787302268901
  • 页数:547 页
图书介绍:本书旨在介绍用于解决现实问题的函数式思想及相关技巧。尽管本书给出了很多用F#和C#两种语言编写的示例,但其重点在于阐述思想,而不是介绍F#或C#语言。

第Ⅰ部分 学习函数式思维方式 3

第1章 不同的思维方式 3

1.1 什么是函数式编程 4

1.2 通向现实世界函数式编程的途径 6

1.2.1 函数式语言 6

1.2.2 .NET平台上的函数式编程 7

1.3 用函数式编程提高生产效率 7

1.3.1 函数式范例 8

1.3.2 声明性编程风格 8

1.3.3 理解程序所做的工作 10

1.3.4 并发友好的应用编程 11

1.3.5 函数式风格如何塑造代码 11

1.4 函数式编程举例 13

1.4.1 使用声明性风格表明目的 13

1.4.2 理解使用不可变性的代码 18

1.4.3 编写高效的并行程序 21

1.5 介绍F# 23

1.5.1 F#中的Hello world程序 24

1.5.2 从简单到现实世界 25

1.6 小结 29

第2章 函数式编程的核心概念 30

2.1 函数式编程的基础 31

2.2 函数式程序的求值 33

2.2.1 处理不可变值 33

2.2.2 使用不可变数据结构 35

2.2.3 使用递归改变程序状态 36

2.2.4 使用表达式而不是语句 37

2.2.5 计算式运算 38

2.3 编写声明性代码 41

2.3.1 以函数为值 41

2.3.2 高阶函数 43

2.4 函数式类型和值 46

2.4.1 C#和F#中的类型推断 47

2.4.2 可区分联合类型简介 49

2.4.3 模式匹配 50

2.4.4 编译时程序检查 53

2.5 小结 55

第3章 F#和C#中的元组、列表与函数 56

3.1 值和函数声明 57

3.1.1 值声明与作用域 57

3.1.2 函数声明 59

3.1.3 声明可变值 61

3.2 使用不可变数据结构 62

3.2.1 元组类型介绍 62

3.2.2 在C#中实现元组类型 65

3.2.3 用元组进行计算 67

3.2.4 对元组使用模式匹配 68

3.3 列表和递归 70

3.3.1 递归计算 71

3.3.2 函数式列表简介 72

3.3.3 C#中的函数式列表 76

3.3.4 函数式列表处理 77

3.4 将函数用作值 79

3.4.1 处理数值列表 80

3.4.2 参数化函数的好处 83

3.5 小结 84

第4章 F#与.NET库应用实例 85

4.1 用F#绘制饼图 85

4.2 在FSI中编写和测试代码 87

4.2.1 加载和解析数据 87

4.2.2 用数据进行计算 90

4.3 创建一个控制台应用程序 93

4.4 创建一个Windows Forms应用程序 96

4.4.1 创建用户界面 97

4.4.2 绘制图片 100

4.4.3 创建Windows应用程序 106

4.5 小结 8

第Ⅱ部分 基本函数式技巧 111

第5章 在局部使用函数式值 111

5.1 值是什么 112

5.1.1 基元类型、值类型和对象 112

5.1.2 识别值和数据 112

5.2 多个值 113

5.2.1 F#和C#中的多个值 113

5.2.2 元组类型和值构造器 115

5.2.3 以组合方式使用元组 117

5.3 备选值 118

5.3.1 F#中的可区分联合 120

5.3.2 处理备选内容 121

5.3.3 添加类型还是函数 123

5.3.4 使用F#中的option类型 125

5.4 泛型值 127

5.4.1 在C#中实现option类型 128

5.4.2 F#中的泛型option类型 131

5.4.3 对值的类型推断 133

5.4.4 编写泛型函数 135

5.5 函数性值 136

5.5.1 lambda函数 139

5.5.2 函数类型 142

5.5.3 多参数函数 144

5.6 小结 148

第6章 使用高阶函数处理值 149

6.1 泛型高阶函数 150

6.1.1 用F#语言编写泛型函数 151

6.1.2 自定义运算符 151

6.2 处理元组 154

6.2.1 使用函数处理元组 155

6.2.2 C#中处理元组的方法 157

6.3 处理日程安排 158

6.3.1 日程安排列表的处理 160

6.3.2 用C#处理日程安排 161

6.4 处理option类型 162

6.4.1 使用map函数 163

6.4.2 使用bind函数 163

6.4.3 逐步对示例输入求值 165

6.4.4 为option类型实现操作 167

6.5 处理函数 168

6.5.1 函数组合 169

6.5.2 C#中的函数组合 171

6.6 类型推断 172

6.6.1 F#中对函数调用的类型推断 173

6.6.2 自动泛化 173

6.7 处理列表 175

6.7.1 在F#中实现列表 175

6.7.2 理解列表函数的签名 176

6.7.3 实现列表函数 180

6.8 公用处理语言 183

6.8.1 映射、筛选和折叠 183

6.8.2 对列表的bind操作 185

6.9 小结 186

第7章 设计以数据为中心的程序 187

7.1 函数式数据结构 188

7.1.1 使用F#记录类型 189

7.1.2 C#中的函数式数据结构 191

7.2 平面文档表示法 192

7.2.1 绘制元素 194

7.2.2 在窗体上显示绘制的内容 195

7.3 结构化文档表示法 198

7.3.1 转换表示法 199

7.3.2 XML文档表示法 202

7.4 编写操作 206

7.4.1 使用map操作进行更新 206

7.4.2 使用聚合操作进行计算 209

7.5 面向对象式表示法 211

7.5.1 用结构型模式表示数据 211

7.5.2 使用访问者模式添加函数 214

7.6 小结 216

第8章 设计以行为为中心的程序 217

8.1 使用行为集合 218

8.1.1 将行为表示为对象 218

8.1.2 在C#中将行为表示为函数 219

8.1.3 在C#中使用函数集合 221

8.1.4 在F#中使用函数列表 222

8.2 用于处理函数的术语 224

8.2.1 策略设计模式 224

8.2.2 命令设计模式 225

8.2.3 在F#中使用闭包来采集状态 228

8.3 处理组合行为 233

8.3.1 函数的记录 233

8.3.2 构造组合行为 235

8.3.3 F#代码的进一步演进 236

8.4 结合数据与行为 238

8.4.1 决策树 238

8.4.2 F#中的决策树 239

8.4.3 C#中的决策树 242

8.5 小结 245

第Ⅲ部分 高级F#编程技术 249

第9章 将值转换为带有成员的F#对象类型 249

9.1 改进以数据为中心的应用程序 249

9.1.1 向F#类型添加成员 251

9.1.2 使用类型扩展追加成员 254

9.2 改进以数据为中心的应用程序 256

9.2.1 使用函数记录 257

9.2.2 使用接口对象类型 258

9.3 处理.NET接口 260

9.3.1 使用.NET集合 260

9.3.2 使用IDisposable清除资源 262

9.4 具体对象类型 265

9.4.1 函数式类和命令式类 267

9.4.2 实现接口和转换 269

9.5 从C#中使用F#车 273

9.5.1 处理记录和成员 274

9.5.2 处理值和委托 276

9.6 小结 278

第10章 数据结构的效率 279

10.1 优化函数 279

10.1.1 用尾递归避免堆栈溢出 280

10.1.2 使用记忆化缓存结果 285

10.2 处理大型集合 291

10.2.1 再次用尾递归避免堆栈溢出 291

10.2.2 高效地处理列表 294

10.2.3 处理数组 296

10.3 “延续”简介 301

10.3.1 树处理的困难所在 301

10.3.2 使用“延续”编写代码 303

10.4 小结 306

第11章 函数式程序的重构与测试 307

11.1 重构函数式程序 308

11.1.1 重复使用公共代码块 308

11.1.2 跟踪相关性和副作用 311

11.2 测试函数式代码 314

11.2.1 从交互式外壳程序到单元测试 315

11.2.2 编写利用结构等同性的测试 319

11.2.3 测试组合功能 322

11.3 重构计算顺序 323

11.3.1 不同的计算策略 324

11.3.2 计算策略对比 325

11.3.3 使用函数来模拟延迟计算 326

11.3.4 F#中的延迟值 328

11.3.5 为C#实现延迟值 330

11.4 在实践中使用延迟值 332

11.4.1 无限列表 332

11.4.2 缓存图片浏览器中的值 335

11.5 小结 338

第12章 序列表达式和备选工作流 339

12.1 生成序列 340

12.1.1 使用高阶函数 340

12.1.2 使用C#中的迭代器 341

12.1.3 使用F#序列表达式 342

12.2 掌握序列表达式 345

12.2.1 递归序列表达式 345

12.2.2 使用无限序列 347

12.3 处理序列 352

12.3.1 用迭代器转换序列 352

12.3.2 筛选与投影 353

12.3.3 平展投影 356

12.4 介绍备选工作流 361

12.4.1 自定义查询表达式 361

12.4.2 自定义F#语法 363

12.5 自定义计算中的第一步 365

12.5.1 声明计算类型 365

12.5.2 编写计算 366

12.5.3 在F#中实现一个计算构造器 367

12.5.4 在C#中实现查询运算符 369

12.6 为选项实现计算表达式 371

12.7 用记录来补充计算 373

12.7.1 创建记录计算 374

12.7.2 创建记录计算 375

12.7.3 使用计算表达式进行重构 377

12.8 小结 378

第Ⅳ部分 应用函数式编程 381

第13章 异步与数据驱动编程 381

13.1 异步工作流 382

13.1.1 异步工作流为什么重要 382

13.1.2 异步下载网页 383

13.1.3 理解工作流的工作原理 387

13.1.4 创建基元工作流 389

13.2 连接到世界银行 391

13.2.1 访问世界银行的数据 391

13.2.2 从失败中恢复 393

13.3 浏览和获取数据 395

13.3.1 实出XML helper函数 395

13.3.2 提取区域代码 397

13.3.3 获取指标 399

13.4 从数据中收集信息 402

13.4.1 读取值 402

13.4.2 使用度量单位设置数据格式 403

13.4.3 收集有关地区的统计数字 407

13.5 使用Excel实现数据可视化 408

13.5.1 将数据写入Excel 409

13.5.2 在Excel图表中显示数据 411

13.6 小结 413

第14章 编写并行函数式程序 414

14.1 理解不同的并行技术 415

14.1.1 并行处理命令式代码的孤岛 415

14.1.2 声明性数据并行 417

14.1.3 基于任务的并行机制 421

14.2 并行运行图形效果 426

14.2.1 在F#中计算颜色 426

14.2.2 实现和运行颜色滤镜 428

14.2.3 设计主应用程序 431

14.2.4 创建和运行效果 433

14.2.5 实现应用程序的并行化 437

14.2.6 实现模糊效果 439

14.3 创建并行模拟 441

14.3.1 表示模拟世界 442

14.3.2 设计模拟操作 444

14.3.3 实现helper函数 447

14.3.4 实现智能动物与捕食者 449

14.3.5 并行运行模拟 451

14.4 小结 453

第15章 创建可组合函数库 455

15.1 可组合设计方法 456

15.1.1 由符号组合动画 456

15.1.2 为符号赋予含义 457

15.1.3 组合值 458

15.1.4 组合函数和对象 459

15.2 创建动画值 463

15.2.1 函数式动画简介 463

15.2.2 行为简介 464

15.2.3 在C#中创建简单行为 466

15.2.4 在F#中创建简单行为 468

15.3 编写处理行为的计算 469

15.3.1 读取值 470

15.3.2 向行为应用函数 471

15.3.3 将函数转换为“行为函数” 472

15.3.4 在C#中实现提升和map 474

15.4 处理图画 477

15.4.1 表示图画 477

15.4.2 创建和组合图画 479

15.5 创建动画 483

15.5.1 在F#中实现动画窗体 483

15.5.2 使用行为创建动画 486

15.5.3 添加动画基元 488

15.5.4 创建一个太阳系动画 490

15.6 开发经济建模语言 493

15.6.1 经济合同建模 493

15.6.2 定义基元 494

15.6.3 使用建模语言 496

15.7 小结 498

第16章 开发函数式反应程序 499

16.1 使用事件的反应式编程 500

16.1.1 事件函数简介 501

16.1.2 使用事件和可观察对象 502

16.1.3 创建一个简单的反应式应用程序 505

16.1.4 使用LINQ进行声明性事件处理 507

16.1.5 在F#中声明事件 509

16.2 创建反应式动画 511

16.2.1 使用switch函数 511

16.2.2 实现switch函数 513

16.3 使用工作流进行UI编程 514

16.3.1 异步等待事件 514

16.3.2 绘制矩形 517

16.4 在反应式应用程序中存储状态 521

16.4.1 安全地处理状态 521

16.4.2 创建邮箱处理器 521

16.4.3 使用消息进行通信 524

16.4.4 封装邮箱处理器 528

16.4.5 等待多个事件 529

16.5 消息传送并发性 531

16.5.1 创建状态机处理器 532

16.5.2 并发访问邮箱 534

16.6 小结 535

附录 展望 537

快速参考 函数式编程概念 540

快速参考 F#语言构造 542

资源 544