編輯推薦
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 電子書
評分
☆☆☆☆☆
評分
☆☆☆☆☆
在我而言,好書評有兩個標準。首先是最簡單粗暴的:這個書評能不能引起我閱讀原書的興趣。如果能,那麼這篇書評的質量就不會差到哪裏去瞭。因為能引發閱讀原書的興趣的書評,必然有某處是能打動人的。其次是書評能否體現書評人自己的思考:比如說對書中人物情感的剖析;對作者寫作技巧寫作風格的分析總結;對書中不足之處的分析說明等等。因為這些內容纔是成就一篇好書評的基礎,這樣一篇書評纔能讓人信服:書評人是真的把這本書讀進去瞭,他對這本書的優劣之處瞭然於胸,他誠實地將這本書的閃光之處與缺陷以及自己的所感所思展示瞭齣來。
評分
☆☆☆☆☆
不錯京東物流很快,一直在京東買書,有優惠就更好瞭……
評分
☆☆☆☆☆
非常滿意的一次購書,送貨到傢,謝謝!
評分
☆☆☆☆☆
新的程序設計思想,開闊眼界!
評分
☆☆☆☆☆
純函數式的程序設計語言,不一樣的思維。
評分
☆☆☆☆☆
送貨很快,打摺買很實惠。
評分
☆☆☆☆☆
發貨速度很快,書暫時還沒看,不過工具類書籍也不會差到哪去
評分
☆☆☆☆☆
新的程序設計思想,開闊眼界!