编辑推荐
Richard Bird教授的文字以清晰和严谨著称,他为初学函数式程序设计的学生所著的这本新教材,强调利用数学思维进行推理的基本方法。在解决问题时,首先从显而易见的简单方法入手,然后应用一些熟知的恒等式,运用等式规则逐步推理,最终得到效率倍增的解。在这一过程中,学生不仅理解了程序的性质,而且实现了更高效的计算。本书特色涵盖Haskell的大量特性,但不拘泥于语言细节,而是借助它来阐明函数式程序设计的思想和方法。包含数独实例和精美打印实例,以及100余道精心挑选的习题,并配有详尽的解答。
内容简介
本书通过Haskell语言介绍函数式程序设计的基本思想和方法,讲解如何将数学思维应用于程序设计问题,以实现更高效的计算。本书涵盖Haskell的诸多特性,但并不是这门语言的参考指南,而是旨在利用丰富的实例和练习揭示函数式程序设计的本质。本书不要求读者具备程序设计基础,所涉及的数学知识也并不高深,既适合初学者阅读,也适合有经验的程序员参考。
作者简介
理查德·伯德(RichardBird)牛漳大学计算机实验室的荣誉退休教授,牛津大学林肯学院的研究员。他的著述颇丰,包括《AlgebraofProgramming》(PrenticeHall,1996)和《PearlsOfFunctionalALgorithmDesign》(CambridgeUniversityPress,2010)。
目录
出版者的话
译者序
前言
第1章何谓函数式程序设计1
1.1函数和类型1
1.2函数复合2
1.3例子:高频词2
1.4例子:数字转换为词5
1.5Haskell平台8
1.6习题9
1.7答案11
1.8注记13
第2章表达式、类型和值15
2.1GHCi会话15
2.2名称和运算符17
2.3求值18
2.4类型和类族20
2.5打印值22
2.6模块24
2.7Haskell版面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章效率977.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.1IO单子159
10.2更多的单子162
10.3状态单子165
10.4ST单子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
前言/序言
本书是《IntroductiontoFunctionalProgrammingUsingHaskell,SecondEdition》的全新升级,主要变化有:重新组织部分介绍性内容,以适应一个学期或者两个学期课程的不同需要;几个新的实例;100多道习题及其答案。与以前的版本一样,本书不需要读者具有计算机或者程序设计知识,因此本书适用于计算专业的第一门课程。
在编写教材时,每个作者各具风格,本书也不例外。尽管现在有很多关于Haskell的书、教程、文章和博客等,但是很少有人强调用数学思维思考函数式程序设计的能力,在我看来,正是这种能力使其成为有史以来最棒的程序设计方法。这其中所涉及的数学知识既不新也不复杂,任何学过高中数学(如三角函数)并且应用三角函数恒等式化简过正余弦表达式(一个典型的例子:将sin3α用sinα来表示)的学生很快会发现,在程序设计问题中所要做的工作是完全类似的。使用函数式程序设计所获得的回报是更快的计算。即使在30年后,我依然使用这样的方法,并能从中得到很大的快乐:在解决问题时首先从一个简单、明显却不太高效的方法入手,然后应用一些熟知的恒等式,最后得到一个高效10倍的解。当然,如果我运气好的话。
如果上一段的最后一句让你失去兴趣,如果你一直在远离数学的“魔多”(Mordor),那么本书可能不适合你。我只是说有这种可能,但也不一定(没有人愿意失去读者)。我们在学习一种新的、令人兴奋的编程方法时仍能得到不少乐趣。即使是那些因为各种原因在日常工作中不能使用Haskell,而且也没有时间计算更优解的程序员,仍然因学习Haskell所带来的享受而倍受鼓舞,而且非常赞赏它既简单又清晰简洁地表达计算思想和方法的能力。事实上,用纯函数式表达程序设计思想的能力已经慢慢地融入了主流的命令式程序设计语言,如Python、VisualBasic和C#。
最后,也是最重要的一点:Haskell是一种大规模语言,本书不能涵盖一切内容。本书不是Haskell的参考指南。尽管Haskell语言的细节在每一页出现,特别是在前几章,但是我的初衷是讲解函数式程序设计的本质,用函数思考程序的思想,而不是赘述一种特定语言的特点。但是,过去几年来Haskell已经吸收并实现了早期函数语言(如SASL、KRC、Miranda、Orwell和Gofer)中表达的函数式程序设计的大多数思想,而且难以抵挡用这种超酷语言介绍所有这些特性的诱惑。
书中出现的大多数程序可以在下列网页上找到:
www.cs.ox.ac.uk/publications/books/functional希望将来有更多习题(及答案)和编程项目的建议等可以添加进来。关于Haskell的更多信息,读者应该首选官网www.haskell.org。
致谢本书源于我基于第2版所写的讲义。来自助教和学生的意见和建议为本书增添了很多光彩。另有很多读者通过电子邮件给出建设性的评论和批评,或者指出书中的打字错误和低级错误。这些读者包括:NilsAndersen,AniCalinescu,FranklinChen,SharonCurtis,MartinFilby,SimonFinn,JeroenFokker,MaartenFokkinga,JeremyGibbons,RobertGiegerich,KevinHammond,RalfHinze,GerardHuet,MichaelHinchey,TonyHoare,IainHouston,JohnHughes,GrahamHutton,CezarIonescu,StephenJarvis,GeraintJones,MarkJones,JohnLaunchbury,PaulLicameli,DavidLester,IainMacCullum,UrsulaMartin,LambertMeertens,ErikMeijer,QuentinMiller,OegedeMoor,ChrisOkasaki,OskarPermvall,SimonPeytonJones,MarkRamaer,HamiltonRichards,DanRussell,DonSannella,AntonySimmons,DeepakD’Souza,JohnSpanondakis,MikeSpivey,JoeStoy,BernardSufrin,MasatoTakeichi,PeterThiemann,DavidTurner,ColinWatson和StephenWilson。特别是JeremyGibbons、BernardSufrin和JoséPedroMagalhǎes阅读了初稿,并提出了许多建议。
感谢剑桥大学出版社编辑DavidTranah持续不断的建议和支持。我现在是牛津大学计算机系荣誉退休教授,感谢计算机系和系主任BillRoscoe的一贯支持。
格式说明习题习题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α)以上证明格式是由WimFeijen发明的,本书将使用这种证明格式。
RichardBird
alt="" />
Haskell函数式程序设计 下载 mobi epub pdf txt 电子书 格式
评分
☆☆☆☆☆
理论性很强,很实用,是正版
评分
☆☆☆☆☆
很满意的一次购物
评分
☆☆☆☆☆
真正的好书,讲解了如何用函数式编程语言来思考和解决问题,不是那种教语法,讲解例子的入门书籍,初学者可能还是从Haskell趣学指南入门好,然后才能从这本书获得真正的提高!
评分
☆☆☆☆☆
正版不错,准备学习
评分
☆☆☆☆☆
并不太适合入门。
评分
☆☆☆☆☆
真正的好书,讲解了如何用函数式编程语言来思考和解决问题,不是那种教语法,讲解例子的入门书籍,初学者可能还是从Haskell趣学指南入门好,然后才能从这本书获得真正的提高!
评分
☆☆☆☆☆
正版不错,准备学习
评分
☆☆☆☆☆
高智商的语言
评分
☆☆☆☆☆
此用户未填写评价内容