《Haskell函数式编程基础 原书第3版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(英)汤普森著
  • 出 版 社:北京:科学出版社
  • 出版年份:2015
  • ISBN:9787030441683
  • 页数:529 页
图书介绍:本书是函数式编程或Haskell编程语言初学者的必备读物。本书侧重介绍了构思程序的过程、许多实例(example)和可运行的案例(case),以及在程序设计、测试、问题解决和避免常见错误方面的建议。此次修订,加入了新的测试资料和领域专用语言,以及大量新的实例和案例研究(包括简单的小游戏)。对已存在的资料进行了扩展和重新排序,一些概念(如简单数据类型和输入/输出)被调到前面的章节中。视图运行实例采用网络浏览器图形和字符串列表来实现。书中的实例使用GHCi(交互式GlasgowHaskellCompiler)进行编译。书中包含了关于Haskell平台的资料、Haskell图书馆的Hackage在线数据库,而且,向读者详细介绍了如何使用这些系统。

第1章 函数式程序设计简介 1

1.1计算机与建模 1

1.2什么是函数 2

1.3图形与函数 3

1.4类型 4

1.5函数式程序设计语言Haskell 6

1.6表达式与计算 7

1.7定义 8

1.8函数定义 10

1.9类型与函数式程序设计 12

1.10计算与求值 13

1.11函数式程序设计的精髓 14

1.12领域专用语言 15

1.13图形的两种模型 16

1.14测试、性质和证明 19

第2章 认识Haskell与GHCi 24

2.1第一个Haskell程序 24

2.2在工作中使用Haskell 25

2.3使用GHCi 26

2.4标准库Prelude和Haskell函数库 30

2.5模块 30

2.6例子:Pictures 31

2.7错误与错误信息 34

第3章 基本类型与定义 37

3.1布尔类型Bool 37

3.2整数类型:Integer和Int 40

3.3重载 43

3.4守卫 43

3.5字符和串 47

3.6浮点数Float 50

3.7语法 53

第4章 设计与书写程序 60

4.1如何开始一个Haskell程序的设计 60

4.2逐步求解问题:局部定义 64

4.3自定义类型:枚举类型 70

44递归 72

4.5实践中的原始递归 76

4.6扩展练习:图形 78

4.7递归的一般形式 81

4.8程序测试 83

第5章 数据类型、多元组与列表 88

5.1多元组和列表简介 88

5.2元组类型 90

5.3代数类型简介 93

5.4本书对列表的介绍方法 98

5.5 Haskell的列表 99

5.6列表概括 101

5.7图书馆数据库 104

第6章 列表程序设计 110

6.1通用函数:多态 110

6.2 Haskell引导库Prelude中的列表函数 112

6.3认识Haskell函数库 115

6.4 Picture例子的实现 119

6.5扩展练习:图形的另一种实现 124

6.6扩展练习:有位置的图形 127

6.7扩展练习:超市账单 130

6.8扩展练习:纸牌和纸牌游戏 134

第7章 定义列表上的函数 137

7.1再谈模式匹配 137

7.2列表与列表模式 138

7.3列表上的原始递归 141

7.4寻找原始递归定义 143

7.5列表上的一般递归 147

7.6例子:文本处理 150

第8章 游戏:Haskell的1/O 156

8.1石头-剪刀-布的策略 156

8.2为什么1/O是一个问题 159

8.3输入/输出 160

8.4 do语法 163

8.5迭代与递归 166

8.6石头-剪刀-布:玩游戏 169

第9章 程序推理 173

9.1理解定义 173

9.2测试与证明 175

9.3定义性、终止性和有限性 176

9.4一些逻辑知识 177

9.5归纳法 178

9.6归纳证明的进一步例子 181

9.7推广证明目标 186

第10章 推广:计算模型 190

10.1列表上的计算模式 190

10.2高阶函数:函数作为参数 193

10.3折叠与原始递归 197

10.4推广:拆分列表 201

10.5再谈实例 202

第11章 高阶函数 205

11.1运算:函数的复合和应用 205

11.2函数的表达式:λ抽象 209

11.3部分应用 211

11.4卡瑞式函数 215

11.5定义高阶函数 219

11.6验证与通用函数 223

第12章 高级程序开发 233

12.1再谈Picture 233

12.2函数作为数据:策略组合子 236

12.3函数作为数据:正则表达式匹配 238

12.4函数作为数据的实例 241

12.5例子:建立索引 243

12.6实践中的程序开发 248

12.7理解程序 251

第13章 重载,类族和类型检测 254

13.1为什么使用重载? 254

13.2引进类族 255

13.3签名和实例 258

13.4 Haskell的预定义类族 265

13.5类型检测和类型推导概述 273

13.6单态类型检测 274

13.7多态类型检测 277

13.8类型检测与类族 284

第14章 代数类型 287

14.1代数类型回顾 288

14.2递归代数类型 289

14.3多态代数类型 296

14.4程序错误的表示 299

14.5使用代数类型设计系统 303

14.6代数类型与类族 308

14.7代数类型的推理 313

第15章 实例研究:Huffman编码 319

15.1 Haskell的模块 319

15.2模块设计 323

15.3编码与译码 324

15.4实现一 326

15.5构造Huffman树 328

15.6设计 329

15.7实现二 330

第16章 抽象数据类型 338

16.1类型表示 338

16.2 Haskell抽象数据类型机制 339

16.3队列 343

16.4设计 347

16.5仿真 348

16.6实现仿真 350

16.7查找树 354

16.8集合 360

16.9关系和图 366

16.10评注 374

第17章 惰性计算 376

17.1惰性计算 376

17.2计算规则与惰性计算 378

17.3再谈列表概括 382

17.4数据导向编程 389

17.5实例:分析表达式 392

17.6无穷列表 402

17.7为什么使用无穷列表 407

17.8实例:仿真 410

17.9再谈证明 412

第18章 单子程序设计 419

18.1输入/输出程序 419

18.2深入I/O 422

18.3计算器 425

18.4再谈do记法 428

18.5单子:为函数式程序设计定制的语言 429

18.6例子:树上的单子式计算 435

第19章 领域专用语言 442

19.1程序语言无处不在 442

19.2为什么在Haskell中嵌入DSL ? 445

19.3浅嵌入和深嵌入 446

19.4处理正则表达式的DSL 449

19.5单子式DSL 453

19.6表示计算的DSL:QuickCheck中的数据生成 456

19.7深入DSL 461

第20章 时间与空间行为 463

20.1函数的复杂度 463

20.2计算的复杂度 467

20.3集合的实现 471

20.4空间行为 472

20.5再谈折叠 475

20.6避免重复计算:记忆 481

第21章 结论 487

21.1函数式程序设计的威力 487

21.2深入Haskell 488

21.3网络上的Haskell 489

21.4其他函数式程序设计语言 490

附录A 函数式,命令式和OO程序设计 492

A.1值与状态 492

A.2函数与变量 493

A.3程序验证 493

A.4记录和元组 494

A.5列表和指针 495

A.6高阶函数 497

A.7多态 497

A.8定义类型与类族 498

A.9列表概括 498

A.10惰性计算 499

A.11状态,无穷列表和单子 499

A.12结论 499

附录B 术语解释 501

附录C Haskell运算符 509

附录D Haskell实践 511

D.1实现 511

D.2下载Craft3e代码 511

D.3使用GHCi 511

D.4 Haskell编辑器 511

附录E GHCi错误 513

E.1语法错误 513

E.2类型错误 515

E.3程序错误 517

E.4模块错误 517

E.5系统信息 517

附录F 项目建设 519

F.1游戏与智力测验 519

F.2 Web图形 520

F.3逻辑 520

F.4投票系统 521

F.5有穷自动机 522

F.6领域专用语言 522

参考文献 523

索引 526