中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折!

歡迎光臨中圖網 請 | 注冊
> >>
Clojure編程樂趣(第2版)

包郵 Clojure編程樂趣(第2版)

出版社:人民郵電出版社出版時間:2017-04-01
開本: 16開 頁數(shù): 442
中 圖 價:¥65.1(7.3折) 定價  ¥89.0 登錄后可看到會員價
加入購物車 收藏
開年大促, 全場包郵
?新疆、西藏除外
本類五星書更多>

Clojure編程樂趣(第2版) 版權信息

  • ISBN:9787115443298
  • 條形碼:9787115443298 ; 978-7-115-44329-8
  • 裝幀:一般膠版紙
  • 冊數(shù):暫無
  • 重量:暫無
  • 所屬分類:>>

Clojure編程樂趣(第2版) 本書特色

這既不是一本Clojure初學指南,也不是一本Clojure的編程操作手冊。本書通過對Clojure詳盡地探究,講述函數(shù)式的程序設計方式,幫助讀者理解和體會Clojure編程的樂趣,進而開發(fā)出優(yōu)美的軟件。 全書分為6個部分共17章。第1部分是基礎,包括第1~3章,從Clojure背后的思想開始,介紹了Clojure的基礎知識,并帶領讀者初步嘗試Clojure編程。第2部分是第4章和第5章,介紹了Clojure的各種數(shù)據類型。第3部分是第6章和第7章,介紹了函數(shù)式編程的特性。第4部分是第8章~11章,分別介紹了宏、組合數(shù)據域代碼、Clojure對Java的調用,以及并發(fā)編程等較為高級的話題。第5部分為第12章和第13章,探討了Clojure的性能問題及其帶給我們的思考。第6部分為第14~17章,介紹了面向數(shù)據編程、性能、思考程序以及Clojure的思考方式。 本書適合想要轉向函數(shù)式語言或進行并發(fā)編程的程序員閱讀,對JVM平臺編程感興趣的程序員,想要學習中高級的Java程序以及Clojure的讀者,均能夠從中獲益。

Clojure編程樂趣(第2版) 內容簡介

如果曾親眼見過數(shù)十行的Java或Ruby濃縮成寥寥數(shù)行Clojure代碼,你便不難理解為何本書作者稱Clojure 是一種“有樂趣的語言”。Clojure 是一種運行于JVM的Lisp方言。它將腳本語言出色的特性同產品環(huán)境強大的特性(持久化數(shù)據結構和干凈的多線程)相結合, 這些都是開發(fā)工業(yè)強度應用所需要的。本書深針對Clojure 1.6 全面更新。本書超越了語法的層面,它不只是展示如何編寫流暢而慣用的Clojure 代碼,我們將學到函數(shù)式的程序設計方式,掌握讓Clojure 優(yōu)雅而高效的技術。本書舉重若輕地帶我們進入軟件開發(fā)的一些困難領域,如并發(fā)、互操作和性能。它為我們展現(xiàn)了以Clojure 之道思考問題的美妙之處。 本書包括以下內容: ●使用ClojureScript 構建Web 應用; ●掌握函數(shù)式編程技術; ●簡化并發(fā); ●介紹Clojure 1.6。 如果你有一些使用Clojure和Lisp的經驗,那么本書很適合你閱讀。 包含了一系列豐富的編程概念。 ——William E. Byrd 和Daniel P.Friedman The Reasoned Schemer 的作者 你會學得飛快! ——Steve Yegge,Google Clojure改變了我們思考編程的方式, 而本書改變了我們對Clojure的認識。 ——Cristofer Weber 對于新手和有經驗的程序員來說,本 書中的示例都很清晰。 ——Jasper Lievisse Adriaanse 閱讀本書充滿了樂趣,我不忍釋卷。 ——Heather Campbell

Clojure編程樂趣(第2版) 目錄

第1部分 基 礎



第1章 Clojure哲學 3

1.1 Clojure之道 4

1.1.1 簡單 4

1.1.2 專注 5

1.1.3 實用 5

1.1.4 清晰 6

1.1.5 一致 7

1.2 為何(又一種)Lisp 8

1.2.1 優(yōu)美 8

1.2.2 極度靈活 9

1.3 函數(shù)式編程 15

1.3.1 一個可行的函數(shù)式編程

定義 15

1.3.2 函數(shù)式編程的內涵 16

1.4 Clojure為何不是面向

對象的 16

1.4.1 定義術語 16

1.4.2 命令式“烘烤” 18

1.4.3 OOP提供的大多數(shù)東西,

Clojure也有 18

1.5 小結 23

第2章 Clojure疾風式教程 24

2.1 基本數(shù)據類型 25

2.1.1 數(shù)字 25

2.1.2 整數(shù) 25

2.1.3 浮點數(shù) 26

2.1.4 有理數(shù) 26

2.1.5 符號 27

2.1.6 關鍵字 27

2.1.7 字符串 27

2.1.8 字符 28

2.2 組合起來:集合 28

2.2.1 list 28

2.2.2 vector 29

2.2.3 map 29

2.2.4 set 29

2.3 付諸實現(xiàn):函數(shù) 29

2.4 var 30

2.5 函數(shù) 30

2.5.1 匿名函數(shù) 31

2.5.2 使用def和defn定義命名

函數(shù) 31

2.5.3 不同參數(shù)數(shù)量的函數(shù) 32

2.5.4 以#()定義原位(in-place)

函數(shù) 33

2.6 局部量、循環(huán)和block 33

2.6.1 block 34

2.6.2 局部量 34

2.6.3 循環(huán) 35

2.7 防止發(fā)生:quote 37

2.7.1 求值 37

2.7.2 Quoting 38

2.7.3 反quote 40

2.7.4 反quote拼接 41

2.7.5 auto-gensym 41

2.8 與Java互操作 41

2.8.1 訪問靜態(tài)類成員(僅限于

Clojure) 41

2.8.2 創(chuàng)建Java實例 42

2.8.3 用.運算符訪問Java實例

成員 42

2.8.4 設置Java實例屬性 43

2.8.5 ..宏 43

2.8.6 doto宏 44

2.8.7 定義類 44

2.9 異常環(huán)境 44

2.10 命名空間 45

2.10.1 用ns創(chuàng)建命名空間 45

2.10.2 用:require加載其他命名

空間 46

2.10.3 用:refer加載和創(chuàng)建

映射 47

2.10.4 用:refer創(chuàng)建映射 47

2.10.5 用:import加載Java類 48

2.11 小結 48

第3章 小試牛刀 49

3.1 真值 50

3.1.1 什么是真 50

3.1.2 不要創(chuàng)建布爾對象 50

3.1.3 nil vs. false 51

3.2 小心翼翼nil雙關 51

3.3 解構 53

3.3.1 你的任務,你應該選擇

接受 53

3.3.2 解構vector 53

3.3.3 解構map 55

3.3.4 解構函數(shù)參數(shù) 57

3.3.5 解構vs.訪問器方法 57

3.4 用REPL做試驗 57

3.4.1 試驗seq 57

3.4.2 試驗圖形化 59

3.4.3 知識匯總 60

3.4.4 出錯之時 61

3.4.5 只為樂趣 62

3.5 小結 63



第2部分 數(shù) 據 類 型



第4章 標量 67

4.1 理解精度 68

4.1.1 截斷(Truncation) 68

4.1.2 提升(Promotion) 69

4.1.3 上溢(Overflow) 69

4.1.4 下溢(Underflow) 70

4.1.5 舍入錯誤(Rounding

errors) 70

4.2 有理數(shù) 71

4.2.1 為什么是有理數(shù) 71

4.2.2 怎樣才是有理數(shù) 72

4.2.3 有理數(shù)的合理性 73

4.3 使用關鍵字的時機 73

4.3.1 關鍵字的應用 73

4.3.2 限定關鍵字 75

4.4 符號解析 76

4.4.1 元數(shù)據 77

4.4.2 符號與命名空間 78

4.4.3 Lisp-1 78

4.5 正則表達式——第二個

問題 79

4.5.1 語法 79

4.5.2 函數(shù) 80

4.5.3 小心可變匹配器

(matcher) 81

4.6 總結 81

第5章 組合數(shù)據類型 82

5.1 持久化、序列和

復雜度 83

5.1.1 “你一直用著這個詞。我認

為,這并不意味著它就是你

以為的含義” 83

5.1.2 序列術語及其含義 84

5.1.3 大O 87

5.2 vector:創(chuàng)建和使用其各種

變體 89

5.2.1 構建vector 89

5.2.2 大vector 90

5.2.3 vector當作棧 93

5.2.4 使用vector而非reverse 94

5.2.5 子vector 95

5.2.6 vector當作MapEntry 95

5.2.7 vector不是什么 96

5.3 list:Clojure代碼form的

數(shù)據結構 97

5.3.1 像Lisp那樣的list 97

5.3.2 list當作棧 98

5.3.3 list不是什么 98

5.4 如何使用持久化隊列 99

5.4.1 什么都沒有的隊列 99

5.4.2 入隊 100

5.4.3 獲取 101

5.4.4 出隊 101

5.5 持久化set 101

5.5.1 Clojure set的基本

屬性 101

5.5.2 用sorted-set保持set的

順序 103

5.5.3 contains 103

5.5.4 clojure.set 104

5.6 思考map 106

5.6.1 hash map 106

5.6.2 以有序map保持鍵值的

順序 107

5.6.3 用數(shù)組map保持插入

順序 108

5.7 知識匯總:在序列里查找

某項的位置 109

5.8 小結 111



第3部分 函數(shù)式編程



第6章 惰性與不變性 115

6.1 關于不變性:按照自己的

方式去使用 115

6.1.1 什么是不變性? 116

6.1.2 不變性可以做什么? 116

6.2 設計一個持久化

玩具 118

6.3 惰性 121

6.3.1 以“邏輯與”熟悉惰性 122

6.3.2 理解lazy-seq的秘訣 123

6.3.3 丟掉頭 126

6.3.4 采用無限序列 126

6.3.5 delay和force宏 128

6.4 知識匯總:一個惰性的

快速排序程序 130

6.4 小結 133

第7章 函數(shù)式編程 134

7.1 各種形式的函數(shù) 134

7.1.1 一等函數(shù) 135

7.1.2 高階函數(shù) 138

7.1.3 純函數(shù) 141

7.1.4 命名實參 143

7.1.5 使用前置條件和后置條件

約束函數(shù) 143

7.2 閉包 145

7.2.1 函數(shù)返回閉包 146

7.2.2 隱藏參數(shù) 147

7.2.3 將閉包當作函數(shù)傳遞 148

7.3 遞歸思考 152

7.3.1 普通遞歸 152

7.3.2 尾遞歸和recur 155

7.3.3 勿忘trampoline 157

7.3.4 延續(xù)傳遞風格 159

7.4 知識匯總:A*尋路 161

7.4.1 世界 161

7.4.2 近鄰 161

7.4.3 A*實現(xiàn) 163

7.4.4 A*實現(xiàn)的筆記 165

7.5 小結 166



第4部分 大規(guī)模設計



第8章 宏 169

8.1 數(shù)據即代碼即數(shù)據 170

8.1.1 語法quote、反quote和

拼接 171

8.1.2 宏之經驗談 173

8.2 定義控制結構 173

8.2.1 不用語法quote定義控制

結構 174

8.2.2 使用語法quote和反quote

定義控制結構 175

8.3 組合form的宏 176

8.4 使用宏改變form 177

8.5 使用宏控制符號解析

時間 181

8.5.1 回指 181

8.5.2 (可能)有用的選擇性名字

捕獲 182

8.6 使用宏管理資源 183

8.7 知識匯總:返回函數(shù)的

宏 184

8.8 小結 187

第9章 組合數(shù)據與代碼 188

9.1 命名空間 188

9.1.1 創(chuàng)建命名空間 189

9.1.2 只暴露所需 191

9.1.3 聲明性包含和排除 194

9.2 以通用設計模式探索

Clojure多重方法 194

9.2.1 組成部分 195

9.2.2 用法 196

9.2.3 以多重方法拯救 197

9.2.4 處理繼承行為的特別

繼承 197

9.2.5 解析層次中的沖突 198

9.2.6 真正的*大功率任意

分發(fā) 199

9.3 類型、協(xié)議和記錄 200

9.3.1 記錄 200

9.3.2 協(xié)議 203

9.3.3 用deftype從更原始的

基礎開始構建 211

9.4 知識匯總:國際象棋

移動的流暢構建器 213

9.4.1 Java實現(xiàn) 213

9.4.2 Clojure實現(xiàn) 215

9.5 小結 217

第10章 變化和并發(fā) 218

10.1 使用Ref的時機 219

10.1.1 利用ref構建可變

棋盤 221

10.1.2 事務 223

10.1.3 嵌入式事務 225

10.1.4 STM使其簡單的

事情 225

10.1.5 潛在缺陷 226

10.1.6 讓STM不高興的事 227

10.2 利用refs重構 228

10.2.1 解決棋盤例子 228

10.2.2 以commute進行可交換的

改變 230

10.2.3 以ref-set進行普通

改變 231

10.2.4 壓力之下的Ref 232

10.3 使用Agent的時機 233

10.3.1 進程內并發(fā)模型vs分布式

并發(fā)模型 234

10.3.2 用Agent控制I/O 235

10.3.3 send和send-off之間的

差異 237

10.3.4 錯誤處理 239

10.3.5 何時不用Agent 241

10.4 使用Atom的時機 241

10.4.1 跨線程共享 242

10.4.2 在事務里使用Atom 242

10.5 使用lock的時機 244

10.5.1 使用鎖進行安全

變化 245

10.5.2 使用Java的顯式鎖 246

10.6 var和動態(tài)綁定 248

10.6.1 binding宏 248

10.6.2 創(chuàng)建命名var 250

10.6.3 創(chuàng)建匿名var 251

10.6.4 動態(tài)作用域 251

10.7 小結 253

第11章 并行 254

11.1 使用future的時機 255

11.2 使用promise的

時機 259

11.2.1 以promise進行并行

任務 260

11.2.2 回調API到阻塞API 261

11.2.3 確定性死鎖 262

11.3 并行 263

11.3.1 pvalues 263

11.3.2 pmap 263

11.3.3 pcalls 264

11.4 reduce/fold 264

11.5 小結 265





第5部分 宿主共生關系



第12章 Java.next 269

12.1 使用proxy動態(tài)生成

對象 270

12.2 Clojure gen-class和

GUI程序設計 277

12.2.1 命名空間作為類的

規(guī)范 277

12.2.2 命名空間編譯內幕 280

12.2.3 以Clojure探索用戶界面

設計與開發(fā) 281

12.3 Clojure同Java數(shù)組的

關系 284

12.3.1 數(shù)組的類型:原生與

引用 284

12.3.2 數(shù)組可變性 286

12.3.3 那個不幸的命名

約定 286

12.3.4 多維數(shù)組 287

12.3.5 調用可變方法/構造

函數(shù) 288

12.4 所有Clojure函數(shù)都

實現(xiàn)…… 288

12.4.1 java.util.Comparator 288

12.4.2 java.lang.Runnable 289

12.4.3 java.util.concurrent.

Callable 290



12.5 在Java API里使用

Clojure數(shù)據結構 290

12.5.1 java.util.List 291

12.5.2 java.lang.Comparable 291

12.5.3 java.util.RandomAccess 292

12.5.4 java.util.Collection 292

12.5.5 java.util.Set 293

12.6 definterface 293

12.7 慎用異常 295

12.7.1 一點異常的背景 296

12.7.2 運行時異常vs.編譯時

異常 296

12.7.3 處理異常 298

12.7.4 定制異常 299

12.8 小結 300

第13章 ClojureScript 301

13.1 實現(xiàn)VS接口 302

13.2 編譯器內部:分析和

發(fā)布 305

13.2.1 編譯步驟 305

13.2.2 Web Audio 307

13.2.3 高級編譯 311

13.2.4 生成extern.js文件 313

13.3 編譯和運行 315

13.4 小結 319



第6部分 雜 項 考 量



第14章 面向數(shù)據編程 323

14.1 代碼是代碼,數(shù)據是

數(shù)據 323

14.1.1 嚴格的分界 324

14.1.2 ORMG 325

14.1.3 從數(shù)據中獲取信息的

一般方式 326

14.1.4 PLOP 327

14.2 數(shù)據就是數(shù)據 327

14.2.1 值的好處 328

14.2.2 標簽符號 332

14.3 數(shù)據就是代碼 335

14.3.1 數(shù)據可編程引擎 335

14.3.2 可編程數(shù)據引擎的

例子 336

14.3.3 例子:簡單的事件

來源 337

14.4 代碼就是數(shù)據,也是

代碼 345

14.4.1 哈特的發(fā)現(xiàn)和

同像性 346

14.4.2 Clojure代碼就是

數(shù)據 346

14.4.3 規(guī)范括號 346

14.5 小節(jié) 349

第15章 性能 351

15.1 類型提示 352

15.1.1 類型修飾的優(yōu)勢 352

15.1.2 類型提示實參和

返回值 352

15.1.3 類型提示對象 354

15.2 暫態(tài)(transient) 354

15.2.1 短暫的垃圾 354

15.2.2 暫態(tài)在效率上與可變集合

相比較 355

15.3 分塊序列 356

15.4 記憶 358

15.4.1 記憶再研究 359

15.4.2 記憶協(xié)議 359

15.4.3 面向抽象編程 361

15.5 理解強制轉型

(coercion) 361

15.5.1 使用原始類型long 362

15.5.2 使用原生double 364

15.5.3 使用自動提升精度 365

15.6 可縮小的 366

15.6.1 簡單的精簡集合的

例子 366

15.6.2 派生**個reducse函數(shù)

變種 367

15.6.3 更多的可還原函數(shù)的

轉換器 369

15.6.4 reducible轉換器 371

15.6.5 reducible的性能 372

15.6.6 reducible的缺陷 372

15.6.7 整合reducible到Clojure

reduce 373

15.6.8 fold函數(shù):并行的

reduce 374

15.7 小結 377



第16章 思考程序 378

16.1 搜索問題 378

16.2 統(tǒng)一思考數(shù)據 383

16.2.1 潛在的平等性或

滿足性 384

16.2.2 替換 387

16.2.3 一致性 388

16.3 關于core.logic 390

16.3.1 都是關于一致性 390

16.3.2 關系型 391

16.3.3 子目標 394

16.4 約束 397

16.4.1 約束編程介紹 397

16.4.2 通過有限域限制

綁定 399

16.4.3 利用有限域解決數(shù)獨

問題 400

16.5 小結 403

第17章 Clojure改變我們的

思考方式 405

17.1 DSL 406

17.1.1 無所不在的DSL 406

17.1.2 實現(xiàn)類似SQL的DSL用于

生成查詢 408

17.1.3 Clojure方式DSL的

注記 413

17.2 測試 413

17.2.1 一些有用的技術 414

17.2.2 契約式程序設計 416

17.3 缺乏設計模式 417

17.4 錯誤處理和調試 426

17.4.1 錯誤處理 426

17.4.2 調試 429

17.5 珍重 433

附錄 資源 434

Miscellaneous resources 434

Online resources 440

展開全部

Clojure編程樂趣(第2版) 作者簡介

Michael Fogus 和Chris Houser 是Clojure 和ClojureScript 編程語言的貢獻者,而是各種Clojure 庫和語言特性的編寫者。

商品評論(0條)
暫無評論……
書友推薦
編輯推薦
返回頂部
中圖網
在線客服
主站蜘蛛池模板: 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | 楼承板-开闭口楼承板-无锡海逵楼承板 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | BHK汞灯-百科|上海熙浩实业有限公司 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 小学教案模板_中学教师优秀教案_高中教学设计模板_教育巴巴 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 加热制冷恒温循环器-加热制冷循环油浴-杭州庚雨仪器有限公司 | 中山市派格家具有限公司【官网】 | 长沙印刷厂-包装印刷-画册印刷厂家-湖南省日大彩色印务有限公司 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 湖南教师资格网-湖南教师资格证考试网| 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 上海质量认证办理中心| 黑田精工电磁阀-CAMMOZI气缸-ROSS电磁-上海茂硕机械设备有限公司 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 航空铝型材,7系铝型材挤压,硬质阳*氧化-余润铝制品 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 |