Haskell函数式程序设计
作者 : [英]理查德·伯德(Richard Bird) 著
译者 : 乔海燕 译
丛书名 : 计算机科学丛书
出版日期 : 2016-03-07
ISBN : 978-7-111-52932-3
定价 : 69.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 241
开本 : 16
原书名 : Thinking Functionally with Haskell
原出版社: Cambridge University Press
属性分类: 教材
包含CD :
绝版 :
图书简介

通过Haskell来讲解函数式编程的方法与思想,强调与函数式编程有关的数学推理的基本技术。通过学习基础的数学知识,本书使学生运用计算推理来编程,既了解这些程序的性质,又使这些程序更加有效。

图书特色

Richard Bird教授的文字以清晰和严谨著称,他为初学函数式程序设计的学生所著的这本新教材,强调利用数学思维进行推理的基本方法。在解决问题时,首先从显而易见的简单方法入手,然后应用一些熟知的恒等式,运用等式规则逐步推理,最终得到效率倍增的解。在这一过程中,学生不仅理解了程序的性质,而且实现了更高效的计算。

本书特色
涵盖Haskell的大量特性,但不拘泥于语言细节,而是借助它来阐明函数式程序设计的思想和方法。
包含数独实例和精美打印实例,以及100余道精心挑选的习题,并配有详尽的解答。
免费下载源代码:www.cs.ox.ac.uk/publications/books/functional。

理查德·伯德(Richard Bird) 牛津大学计算机实验室的荣誉退休教授,牛津大学林肯学院的研究员。他的著述颇丰,包括《Algebra of Programming》 (Prentice Hall, 1996)和《Pearls of Functional Algorithm Design》 (Cambridge University Press, 2010)。

图书前言

本书是《Introduction to Functional Programming Using Haskell,Second Edition》的全新升级,主要变化有:重新组织部分介绍性内容,以适应一个学期或者两个学期课程的不同需要;几个新的实例;100多道习题及其答案。与以前的版本一样,本书不需要读者具有计算机或者程序设计知识,因此本书适用于计算专业的第一门课程。
在编写教材时,每个作者各具风格,本书也不例外。尽管现在有很多关于Haskell的书、教程、文章和博客等,但是很少有人强调用数学思维思考函数式程序设计的能力,在我看来,正是这种能力使其成为有史以来最棒的程序设计方法。这其中所涉及的数学知识既不新也不复杂,任何学过高中数学(如三角函数)并且应用三角函数恒等式化简过正余弦表达式(一个典型的例子:将sin3α用sinα来表示)的学生很快会发现,在程序设计问题中所要做的工作是完全类似的。使用函数式程序设计所获得的回报是更快的计算。即使在30年后,我依然使用这样的方法,并能从中得到很大的快乐:在解决问题时首先从一个简单、明显却不太高效的方法入手,然后应用一些熟知的恒等式,最后得到一个高效10倍的解。当然,如果我运气好的话。
如果上一段的最后一句让你失去兴趣,如果你一直在远离数学的“魔多”(Mordor),那么本书可能不适合你。我只是说有这种可能,但也不一定(没有人愿意失去读者)。我们在学习一种新的、令人兴奋的编程方法时仍能得到不少乐趣。即使是那些因为各种原因在日常工作中不能使用Haskell,而且也没有时间计算更优解的程序员,仍然因学习Haskell所带来的享受而倍受鼓舞,而且非常赞赏它既简单又清晰简洁地表达计算思想和方法的能力。事实上,用纯函数式表达程序设计思想的能力已经慢慢地融入了主流的命令式程序设计语言,如Python、Visual Basic和C#。
最后,也是最重要的一点:Haskell是一种大规模语言,本书不能涵盖一切内容。本书不是Haskell的参考指南。尽管Haskell语言的细节在每一页出现,特别是在前几章,但是我的初衷是讲解函数式程序设计的本质,用函数思考程序的思想,而不是赘述一种特定语言的特点。但是,过去几年来Haskell已经吸收并实现了早期函数语言(如SASL、KRC、Miranda、Orwell和Gofer)中表达的函数式程序设计的大多数思想,而且难以抵挡用这种超酷语言介绍所有这些特性的诱惑。
书中出现的大多数程序可以在下列网页上找到:
www.cs.ox.ac.uk/publications/books/functional
希望将来有更多习题(及答案)和编程项目的建议等可以添加进来。关于Haskell的更多信息,读者应该首选官网www.haskell.org。
致谢
本书源于我基于第2版所写的讲义。来自助教和学生的意见和建议为本书增添了很多光彩。另有很多读者通过电子邮件给出建设性的评论和批评,或者指出书中的打字错误和低级错误。这些读者包括:Nils Andersen,Ani Calinescu,Franklin Chen,Sharon Curtis,Martin Filby,Simon Finn,Jeroen Fokker,Maarten Fokkinga,Jeremy Gibbons,Robert Giegerich,Kevin Hammond,Ralf Hinze,Gerard Huet,Michael Hinchey,Tony Hoare,Iain Houston,John Hughes,Graham Hutton,Cezar Ionescu,Stephen Jarvis,Geraint Jones,Mark Jones,John Launchbury,Paul Licameli,David Lester,Iain MacCullum,Ursula Martin,Lambert Meertens,Erik Meijer,Quentin Miller,Oege de Moor,Chris Okasaki,Oskar Permvall,Simon Peyton Jones,Mark Ramaer,Hamilton Richards,Dan Russell,Don Sannella,Antony Simmons,Deepak D’Souza,John Spanondakis,Mike Spivey,Joe Stoy,Bernard Sufrin,Masato Takeichi,Peter Thiemann,David Turner,Colin Watson和Stephen Wilson。特别是Jeremy Gibbons、Bernard Sufrin和José Pedro Magalhǎes阅读了初稿,并提出了许多建议。
感谢剑桥大学出版社编辑David Tranah持续不断的建议和支持。我现在是牛津大学计算机系荣誉退休教授,感谢计算机系和系主任Bill Roscoe的一贯支持。
格式说明
习题
习题A 请用sinα表示sin3α。
答案
习题A答案sin3α
={算术}
sin(2α+α)
={因为sin(α+β)=sinαcosβ+cosαsinβ}
sin2αcosα+cos2αsinα
={因为sin2α=2sinαcosα}
2sinαcos2α+cos2αsinα
={因为cos2α=cos2α-sin2α}
2sinαcos2α+(cos2α-sin2α)sinα
={因为cos2α+sin2α=1}
sinα(3-4sin2α)以上证明格式是由Wim Feijen发明的,本书将使用这种证明格式。

Richard Bird

上架指导

计算机\硬件

封底文字

Richard Bird教授的文字以清晰和严谨著称,他为初学函数式程序设计的学生所著的这本新教材,强调利用数学思维进行推理的基本方法。在解决问题时,首先从显而易见的简单方法入手,然后应用一些熟知的恒等式,运用等式规则逐步推理,最终得到效率倍增的解。在这一过程中,学生不仅理解了程序的性质,而且实现了更高效的计算。

本书特色
·涵盖Haskell的大量特性,但不拘泥于语言细节,而是借助它来阐明函数式程序设计的思想和方法。
·包含数独实例和精美打印实例,以及100余道精心挑选的习题,并配有详尽的解答。
·免费下载源代码:www.cs.ox.ac.uk/publications/books/functional。

作者简介

[英]理查德·伯德(Richard Bird) 著:【加照片】Richard Bird 牛津大学计算机实验室的荣誉退休教授,牛津大学林肯学院的研究员。他的著述颇丰,包括《Algebra of Programming》 (Prentice Hall, 1996)和《Pearls of Functional Algorithm Design》 (Cambridge University Press, 2010)。

译者简介

乔海燕 译:暂无简介

译者序

命令式程序设计通过指令序列描述解决问题的方法,这些程序使用命令式语言的指令通过不断改变状态实现从输入到输出的过程,如C、C++、Java等。这种程序中虽然也有函数,但是这些函数往往有副作用——不是数学意义上的函数,更准确地说是过程。
函数式程序设计将数学的思维方法应用于程序设计问题,强调一个程序是从输入集合到输出集合的数学函数,而程序员的任务就是定义可实现输入到输出转换的数学函数。近年来,许多函数式程序设计语言已成功用于工业和商业应用的开发,包括Common List、Erland、F#、Haskell、Racket和Scheme等。函数式程序设计对于程序设计者和程序员也产生了深刻的影响。许多命令式语言也融入了函数式程序的思想,如C#和Java增加了便于使用函数式程序的构件。许多程序员即使在使用命令式语言时也会使用函数式方式编写程序。
Richard Bird教授常年研究和讲授函数式程序设计和算法设计,本书便是他在多年积累的经验和素材基础上编写的。书中介绍了函数式程序设计的基本思想和方法,这特别要归功于他和Lambert Meertens教授创立的通过程序规格说明导出函数程序的方法。本书之所以选择Haskell,主要在于Haskell是一种开放的语言,它实现了多数函数式程序设计的思想和方法,在学术界和工业界都比较流行,同时这些思想也广泛适用于其他函数式程序设计语言。函数式程序设计虽然强调数学思维或者函数思维,但是所涉及的数学知识并不高深,只需读者有高中数学基础,而且,本书也不需要读者有程序设计基础,所以既适用于初学程序设计的读者,也适用于有一定程序设计经验的程序员学习和参考。
由于译者水平有限,书中难免存在问题,请读者和同行批评指正!在此感谢Richard Bird教授在本书翻译过程中对我的问题的解答!感谢机械工业出版社的编辑给予的支持和帮助!感谢家人对我的支持!

乔海燕
于广州大学城
2015年11月

图书目录

出版者的话
译者序
前言
第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 类族Num33
 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和filter46
 4.7 函数zip和zipWith49
 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 函数foldr78
 6.4 函数foldl81
 6.5 函数scanl83
 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

教学资源推荐
作者: Al Kelley, Ira Pohl
作者: John Lewis Peter J. DePasquale;Joseph Chase;
参考读物推荐
作者: (美)Jos Dirksen 著
作者: [美] 亚历山大 A. 斯捷潘诺夫(Alexander A. Stepanov) 丹尼尔 E.罗斯(Daniel E. Rose)著
作者: (美)Matt Massie Bernard Li Brad Nicholes Vladimir Vuksan 著
作者: Nicholas A.Solter, Scott J.Kleper