《haskell函數式編程入門》
第1章 haskell簡介 1
1.1 haskell的由來 1
1.2 haskell編譯器的安裝以及 編寫環境 3
1.3 ghci的使用 4
1.3.1 ghci中的命令 5
1.3.2 在ghci中調用函數 5
1.4 .hs和.lhs文件、注釋與庫函數 7
1.5 第一個haskell程序helloworld! 7
本章小結 8
第2章 類型係統和函數 9
2.1 haskell的類型與數據 9
2.1.1 haskell常用數據類型 9
2.1.2 函數類型 14
2.1.3 類型的彆名 17
2.1.4 類型的重要性 18
2.2 haskell中的類型類 19
2.2.1 相等類型類:eq 20
2.2.2 有序類型類:ord 20
2.2.3 枚舉類型類:emum 21
.2.2.4 有界類型類:bounded 21
2.2.5 數字類型類:num 22
2.2.6 可顯示類型類:show 25
2.2.7 小結 25
2.3 haskell中的函數 26
2.3.1 haskell中的值 26
2.3.2 函數思想入門 27
2.3.3 函數的基本定義格式 28
2.3.4 λ錶達式 30
2.3.5 參數的綁定 34
2.4 haskell中的錶達式 35
2.4.1 條件錶達式 35
2.4.2 情況分析錶達式 36
2.4.3 守衛錶達式 37
2.4.4 模式匹配 37
2.4.5 運算符與函數 38
2.4.6 運算符與自定義運算符 38
本章小結 41
第3章 基於布爾值的函數 42
3.1 關鍵字module與import簡介 42
3.2 簡易布爾值的函數 43
3.3 與非門和或非門 46
本章小結 47
第4章 庫函數及其應用 48
4.1 預加載庫函數 48
4.1.1 常用函數 48
4.1.2 基於列錶的函數 50
4.1.3 定義曆法公式 57
4.1.4 字符串處理的函數 58
4.2 字符與位函數庫簡介 60
4.2.1 data.char 60
4.2.2 data.bits 60
本章小結 61
第5章 遞歸函數 62
5.1 遞歸函數的概念 62
5.2 簡單遞歸函數 64
5.3 擴展遞歸與尾遞歸 66
5.4 互調遞歸 68
5.5 麥卡锡的91函數 69
5.6 斐波那契數列 69
5.7 十進製數字轉成羅馬數字 73
5.8 二分法查找 74
5.9 漢諾塔 75
5.10 排序算法 78
5.10.1 插入排序 78
5.10.2 冒泡排序 81
5.10.3 選擇排序 83
5.10.4 快速排序 84
5.10.5 歸並排序 86
小結 91
5.11 遞歸基本條件與程序終止 91
5.12 遞歸與不動點 92
5.13 無基本條件遞歸和惰性求值 94
本章小結 96
第6章 列錶內包 97
6.1 列錶生成器 97
6.2 素數相關趣題 99
6.3 凱撒加密 101
6.3.1 加密 102
6.3.2 解密 102
6.4 排列與組閤問題 104
6.4.1 排列問題 104
6.4.2 錯位排列問題 105
6.4.3 組閤問題 106
6.5 八皇後問題 107
6.6 計算矩陣乘法 111
6.7 最短路徑算法與矩陣乘法 112
本章小結 116
第7章 高階函數與復閤函數 117
7.1 簡單高階函數 117
7.2 摺疊函數foldr與foldl 119
7.3 mapaccuml與mapaccumr函數 125
7.4 復閤函數 126
本章小結 128
第8章 定義數據類型 129
8.1 數據類型的定義 129
8.1.1 枚舉類型 129
8.1.2 構造類型 132
8.1.3 參數化類型 134
8.1.4 遞歸類型 138
8.1.5 雜閤定義類型 140
8.2 類型的同構 142
8.3 使用newtype定義類型 146
8.4 數學歸納法的有效性 148
8.5 樹 150
8.6 卡特蘭數問題 151
8.7 霍夫曼編碼 152
8.8 解24點 154
8.9 zipper 157
8.10 一般化的代數數據類型 159
8.11 類型的kind 162
8.11.1 類型的kind 162
8.11.2 空類型的聲明 164
本章小結 165
第9章 定義類型類 166
9.1 定義類型類 166
9.2 haskell中常見類型類 169
9.2.1 常用類型類 169
9.2.2 functor 171
9.2.3 applicative 173
9.2.4 alternative 177
9.2.5 簡易字符識彆器 179
9.2.6 read類型類 182
9.2.7 單位半群(monoid) 182
9.2.8 foldable與monoid類型類 184
9.2.9 小結 186
9.3 類型類中的類型依賴 187
9.4 類型類中的關聯類型 192
9.5 定長列錶 193
9.6 運行時重載 197
9.7 existential類型 198
本章小結 199
第10章 monad初步 201
10.1 monad簡介 201
10.2 從identity monad開始 204
10.3 maybe monad 206
10.4 monad定律 209
10.5 列錶monad 210
10.6 monad相關運算符 210
10.7 monadplus 211
10.8 functor、applicative與monad的關係 213
本章小結 215
第11章 係統編程及輸入/輸齣 216
11.1 不純函數與副作用 216
11.2 io monad 218
11.3 輸入/輸齣處理 222
11.3.1 control.monad中的函數 222
11.3.2 係統環境變量與命令行參數 224
11.3.3 數據的讀寫 225
11.3.4 格式化輸齣printf函數 228
11.3.5 printf函數的簡易實現 229
11.4 星際譯王詞典 233
11.4.1 二分法查找 234
11.4.2 散列錶的使用 237
11.5 簡易異常處理 239
11.6 haskell中的時間 244
本章小結 245
第12章 記錄器monad、讀取器monad、狀態monad 246
12.1 記錄器monad 246
12.1.1 monadwriter 248
12.1.2 記錄歸並排序過程 249
12.2 讀取器monad 250
12.2.1 monadreader 251
12.2.2 變量環境的引用 252
12.3 狀態monad 253
12.3.1 狀態monad標簽器 254
12.3.2 用狀態monad實現棧結構 255
12.3.3 狀態monad、funapp單位半群和讀取器monad的關係 257
12.3.4 monadstate 258
12.3.5 基於棧的計算器 258
12.4 隨機數的生成 270
本章小結 271
第13章 monad轉換器 273
13.1 從identityt monad轉換器開始 273
13.2 monad轉換器組閤與復閤monad的區彆 276
13.3 monad轉換器的組閤順序 278
13.4 lift與liftio 281
13.5 簡易monad編譯器 282
13.6 語法分析器monad組閤子 286
13.6.1 簡易語法分析器的實現 287
13.6.2 parsec庫簡介 291
13.6.3 上下文無關文法 296
13.6.4 基於語法分析器的計算器 300
本章小結 304
第14章 quickcheck簡介 305
14.1 測試函數屬性 305
14.2 測試數據生成器 308
本章小結 310
第15章 惰性求值簡介 311
15.1 λ演算簡介 311
15.2 ⊥bottom 313
15.3 錶達式形態和thunk 314
15.3.1 whnf、hnf與nf 314
15.3.2 thunk與嚴格求值 315
15.4 求值策略 319
15.4.1 引值調用 319
15.4.2 按名調用 320
15.4.3 常序求值 320
15.5 惰性求值 321
15.6 嚴格模式匹配與惰性模式匹配 322
第16章 並行與並發編程 324
16.1 確定性的並行計算 325
16.2 輕量級綫程 333
16.2.1 調度的不確定性 333
16.2.2 基本綫程通信 334
16.2.3 信道 337
16.2.4 簡易聊天服務器 337
16.3 軟件事務內存 341
16.3.1 軟件事務內存簡介 341
16.3.2 軟件事務內存的使用 343
16.3.3 哲學傢就餐問題 347
16.3.4 聖誕老人問題 350
16.4 異步並發庫簡介 355
本章小結 357
參考文獻 358
後記 359
· · · · · · (
收起)