本書通過Haskell語言介紹函數式程序設計的基本思想和方法,講解如何將數學思維應用于程序設計問題,以實現更高效的計算。本書涵蓋Haskell的諸多特性,但并不是這門語言的參考指南,而是旨在利用豐富的實例和練習揭示函數式程序設計的本質。本書不要求讀者具備程序設計基礎,所涉及的數學知識也并不高深,既適合初學者閱讀,也適合有經驗的程序員參考。
理查德·伯德(Richard Bird)牛漳大學計算機實驗室的榮譽退休教授,牛津大學林肯學院的研究員。他的著述頗豐,包括《Algebra of Programming》(Prentice Hall,1996)和《Pearls Of Functional ALgorithm Design》(Cambridge University Press,2010)。
出版者的話
譯者序
前言
第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