譯者序 xi
前言 xiii
第1章 原生數據 1
1.0 簡介 1
1.1 改變字符串的大小寫 2
1.2 清除字符串中的空白字符 3
1.3 利用部件構建字符串 5
1.4 將字符串作為字符序列 6
1.5 字符與整數的轉換 7
1.6 格式化字符串 9
1.7 按模式查找字符串 11
1.8 利用正則錶達式從字符串中取齣值 12
1.9 對字符串執行查找和替換 13
1.10 將字符串切分成部分 15
1.11 基於數量為字符串加復數 16
1.12 在字符串、符號和關鍵字之間的轉換 18
1.13 利用非常大或非常小的數來保持精度 20
1.14 使用有理數 21
1.15 解析數字 23
1.16 數的截斷和捨入 24
1.17 模糊比較 26
1.18 三角計算 27
1.19 根據不同的進製輸入和輸齣整數 29
1.20 計算數值集閤的統計值 30
1.21 位操作 33
1.22 生成隨機數 34
1.23 操作貨幣 36
1.24 生成唯一ID 37
1.25 得到當前的日期和時間 39
1.26 用字麵值來錶示日期 40
1.27 利用clj-time解析日期和時間 42
1.28 利用clj-time格式化日期 43
1.29 比較日期 45
1.30 計算時間間隔的長度 46
1.31 生成一係列的日期和時間 48
1.32 利用原生Java類型生成一係列日期和時間 49
1.33 根據日期間的關係取得日期 52
1.34 處理時區 53
1.35 將Unix時間戳轉換成Date對象 55
1.36 將Date對象轉換成Unix時間戳 56
第2章 復閤數據 58
2.0 簡介 58
2.1 創建列錶 59
2.2 從已有的數據結構創建列錶 61
2.3 在列錶中“添加”一個元素 62
2.4 從列錶中“移除”一個元素 63
2.5 測試是否列錶 64
2.6 創建嚮量 65
2.7 在嚮量中“添加”一個元素 66
2.8 從嚮量中“移除”一個元素 67
2.9 取得索引處的值 68
2.10 設置索引處的值 70
2.11 創建集 71
2.12 在集中添加和移除元素 73
2.13 測試集成員 74
2.14 使用集操作 76
2.15 創建映射錶 77
2.16 從映射錶中取得值 79
2.17 從映射錶中同時取齣多個鍵 82
2.18 設置映射錶中的鍵 84
2.19 用復閤值作為映射錶的鍵 86
2.20 將映射錶作為序列(或反過來) 88
2.21 對映射錶應用函數 90
2.22 一個鍵保存多個值 92
2.23 閤並映射錶 95
2.24 值的比較與排序 97
2.25 從集閤中移除重復元素 100
2.26 檢測集閤是否包含幾個值中的一個 102
2.27 實現定製的數據結構:紅黑樹(第一部分) 103
2.28 實現定製的數據結構:紅黑樹(第二部分) 106
第3章 廣義計算 111
3.0 簡介 111
3.1 運行最小的Clojure REPL 111
3.2 交互式文檔 112
3.3 探索命名空間 114
3.4 嘗試庫而不指明依賴關係 116
3.5 運行Clojure程序 117
3.6 從命令行運行程序 119
3.7 解析命令行參數 121
3.8 創建定製的項目模闆 124
3.9 構建具有多態行為的函數 128
3.10 擴展內建的類型 133
3.11 用core.async解除消費者和生産者的耦閤 135
3.12 用core.match為Clojure錶達式製作解析器 138
3.13 用core.logic查詢層級圖 141
3.14 演奏兒歌 146
第4章 本地I/O 150
4.0 簡介 150
4.1 寫入STDOUT和STDERR 150
4.2 從控製颱讀入一次擊鍵 152
4.3 執行係統命令 153
4.4 訪問資源文件 156
4.5 復製文件 157
4.6 刪除文件或目錄 159
4.7 列齣目錄中的文件 161
4.8 文件的內存映射 163
4.9 讀寫文本文件 164
4.10 使用臨時文件 165
4.11 在任意位置讀寫文件 166
4.12 並行文件處理 168
4.13 帶歸約的並行文件處理 170
4.14 讀寫Clojure數據 172
4.15 在配置文件中使用edn 174
4.16 將記錄作為edn值發布 178
4.17 讀取Clojure數據時處理未知的帶標簽字麵值 180
4.18 從文件中讀取屬性 182
4.19 讀寫二進製文件 184
4.20 讀寫CSV數據 186
4.21 讀寫壓縮文件 187
4.22 處理XML數據 189
4.23 讀寫JSON數據 190
4.24 生成PDF文件 192
4.25 生成帶可滾動文本的GUI窗口 196
第5章 網絡I/O和Web服務 200
5.0 簡介 200
5.1 發齣HTTP請求 200
5.2 執行異步HTTP請求 202
5.3 發齣Ping 請求 204
5.4 取得並解析RSS數據 205
5.5 發送郵件 206
5.6 用RabbitMQ實現隊列通信 210
5.7 通過MQTT與嵌入式設備通信 215
5.8 並發使用ZeroMQ 219
5.9 創建TCP客戶端 222
5.10 創建TCP服務器 223
5.11 收發UDP包 227
第6章 數據庫 230
6.0 簡介 230
6.1 連接SQL數據庫 231
6.2 利用連接池連接SQL數據庫 233
6.3 操作SQL數據庫 236
6.4 用Korma簡化SQL 242
6.5 用Lucene進行全文查找 245
6.6 用ElasticSearch建立數據索引 248
6.7 使用Cassandra 252
6.8 使用MongoDB 256
6.9 使用Redis 259
6.10 連接Datomic數據庫 262
6.11 為Datomic數據庫定義數據模式 264
6.12 嚮Datomic寫入數據 267
6.13 從Datomic數據庫中刪除數據 270
6.14 嘗試Datomic事務而不提交 272
6.15 遍曆Datomic索引 274
第7章 Web應用 277
7.0 簡介 277
7.1 Ring簡介 277
7.2 使用Ring中間件 279
7.3 用Ring提供靜態文件 281
7.4 用Ring處理錶單數據 282
7.5 用Ring處理Cookie 284
7.6 用Ring保存會話 286
7.7 在Ring中讀寫請求和響應的頭 288
7.8 用Compojure路由請求 289
7.9 用Ring執行HTTP重定嚮 291
7.10 用Liberator構建REST 風格的應用 292
7.11 用Enlive實現HTML 模闆 294
7.12 用Selmer實現模闆 300
7.13 用Hiccup實現模闆 305
7.14 渲染Markdown文檔 307
7.15 用Luminus來構建應用 310
第8章 性能與開發效率 312
8.0 簡介 312
8.1 AOT編譯 312
8.2 將項目打包成JAR文件 314
8.3 創建WAR 文件 317
8.4 將應用作為守護進程運行 320
8.5 利用類型暗示減輕性能問題 325
8.6 用原生Java數組進行快速數學運算 328
8.7 用Timbre進行簡單剖析 330
8.8 用Timbre記日誌 332
8.9 嚮Clojars發布庫 334
8.10 使用宏來簡化API 棄用 336
第9章 分布式計算 341
9.0 簡介 341
9.1 用Storm構建活動推送係統 342
9.2 用抽取轉換加載(ETL)管道來處理數據 350
9.3 聚閤大型文件 354
9.4 測試Cascalog工作流 359
9.5 設置Cascalog任務的檢查點 361
9.6 解釋Cascalog查詢 363
9.7 在ElasticMapReduce上運行Cascalog任務 365
第10章 測試 367
10.0 簡介 367
10.1 單元測試 368
10.2 用Midje測試 372
10.3 通過隨機輸入進行徹底測試 375
10.4 尋找導緻失敗的值 379
10.5 運行基於瀏覽器的測試 381
10.6 追蹤代碼執行 386
10.7 用core.typed避免空指針異常 389
10.8 用core.typed驗證Java互操作 392
10.9 用core.typed檢查高階函數 395
關於作者 399
關於封麵 399
· · · · · · (
收起)