産品特色
內容簡介
《Clojure編程樂趣》並非Clojure初學指南,也不是一本Clojure的編程操作手冊,而是通過對Clojure詳盡地探究,教授函數式的程序設計方式,幫助讀者理解和體會Clojure編程的樂趣,進而開發齣優美的軟件。
全書分為5個部分共13章。第1部分是基礎,包括第1章到第3章,從Clojure背後的思想開始,介紹瞭Clojure的基礎知識,並帶領讀者初步嘗試Clojure編程。第2部分包括第4章和第5章,介紹瞭Clojure的各種數據類型。第3部分是第6章和第7章,介紹瞭函數式編程的特性。第4部分包括第8章到第11章,分彆介紹瞭宏、組閤數據域代碼、Clojure對Java的調用,以及並發編程等較為高級的話題。第5部分為第12章和第13章,探討瞭Clojure的性能問題及其帶給我們的思考。
《Clojure編程樂趣》適閤有一定基礎的Clojure程序員閱讀,進而掌握函數編程的思考方法和程序設計方法,也可以作為讀者學習函數式編程的參考資料。
作者簡介
Michael Fogus 是Clojure/core 成員,在分布式模擬、機器視覺 及專傢係統方麵擁有豐富的經驗。 Chris Houser是Clojure 的關鍵貢獻者,曾實現瞭幾個重要的特性。
內頁插圖
目錄
第1部分 基礎
第1章 Clojure哲學
1.1 Clojure之道
1.1.1 簡單
1.1.2 專注
1.1.3 實用
1.1.4 清晰
1.1.5 一緻
1.2 為何(又一種)Lisp
1.2.1 優美
1.2.2 極度靈活
1.2.3 代碼即數據
1.3 函數式編程
1.3.1 一個可行的函數式編程定義
1.3.2 函數式編程的內涵
1.4 Clojure為何不是麵嚮對象的
1.4.1 定義術語
1.4.2 命令式“烘烤”
1.4.3 OOP提供的大多數東西,Clojure也有
1.5 小結
第2章 Clojure疾風式教程
2.1 標量
2.1.1 數字
2.1.2 整數
2.1.3 浮點數
2.1.4 有理數
2.1.5 符號
2.1.6 關鍵字
2.1.7 字符串
2.1.8 字符
2.2 組閤起來:集閤
2.2.1 list
2.2.2 vector
2.2.3 map
2.2.4 set
2.3 付諸實現:函數
2.3.1 調用函數
2.3.2 定義函數
2.3.3 用def和defn簡化函數定義
2.3.4 以#()定義原位(in-place)函數
2.4 var
2.5 局部量、循環和block
2.5.1 block
2.5.2 局部量
2.5.3 循環
2.6 防止發生:quote
2.6.1 求值
2.6.2 quote
2.6.3 反quote
2.6.4 反quote拼接
2.6.5 auto-gensym
2.7 與Java互操作
2.7.1 訪問靜態類成員
2.7.2 創建Java實例
2.7.3 用.運算符訪問Java實例成員
2.7.4 設置Java實例屬性
2.7.5 …宏
2.7.6 doto宏
2.7.7 定義類
2.8 異常環境
2.9 命名空間
2.9.1 用ns創建命名空間
2.9.2 用:require加載其他命名空間
2.9.3 用:use加載和創建映射
2.9.4 用:refer創建映射
2.9.5 用:import加載Java類
2.10 小結
第3章 小試牛刀
3.1 真值
3.1.1 什麼是真
3.1.2 不要創建布爾對象
3.1.3 nil vs. false
3.2 小心翼翼nil雙關
3.3 解構
3.3.1 你的任務,你應該選擇接受
3.3.2 解構vector
3.3.3 解構map
3.3.4 解構函數參數
3.3.5 解構vs.訪問器方法
3.4 用REPL做試驗
3.4.1 試驗seq
3.4.2 試驗圖形化
3.4.3 知識匯總
3.4.4 齣錯之時
3.4.5 隻為樂趣
3.5 小結
第2部分 數據類型
第4章 標量
4.1 理解精度
4.1.1 截斷(Truncation)
4.1.2 提升(Promotion)
4.1.3 上溢(Overflow)
4.1.4 下溢(Underflow)
4.1.5 捨入錯誤(Rounding errors)
4.2 有理數
4.2.1 為什麼是有理數
4.2.2 怎樣纔是有理數
4.2.3 有理數的閤理性
4.3 使用關鍵字的時機
4.3.1 關鍵字與符號有怎樣的差彆
4.3.2 限定關鍵字
4.4 符號解析
4.4.1 元數據
4.4.2 符號與命名空間
4.4.3 Lisp-1
4.5 正則錶達式--第二個問題
4.5.1 語法
4.5.2 函數
4.5.3 小心可變匹配器(matcher)
4.6 總結
第5章 組閤數據類型
5.1 持久化、序列和復雜度
5.1.1 “你一直用著這個詞。我認為,這並不意味著它就是你以為的含義”
5.1.2 序列術語及其含義
5.1.3 大O
5.2 vector:創建和使用其各種變體
5.2.1 構建vector
5.2.2 大vector
5.2.3 vector當做棧
5.2.4 使用vector而非reverse
5.2.5 子vector
5.2.6 vector當做MapEntry
5.2.7 vector不是什麼
5.3 list:Clojure代碼form的數據結構
5.3.1 像Lisp那樣的list
5.3.2 list當做棧
5.3.3 list不是什麼
5.4 如何使用持久化隊列
5.4.1 什麼都沒有的隊列
5.4.2 入隊
5.4.3 獲取
5.4.4 齣隊
5.5 持久化set
5.5.1 Clojure set的基本屬性
5.5.2 用sorted-set保持set的順序
5.5.3 contains?
5.5.4 clojure.set
5.6 思考map
5.6.1 hash map
5.6.2 以有序map保持鍵值的順序
5.6.3 用數組map保持插入順序
5.7 知識匯總:在序列裏查找某項的位置
5.8 小結
第3部分 函數式編程
第6章 惰性與不變性
6.1 關於不變性
6.1.1 定義不變性
6.1.2 固步自封-不變性
6.2 設計一個持久化玩具
6.3 惰性
6.3.1 以“邏輯與”熟悉惰性
6.3.2 理解lazy-seq的秘訣
6.3.3 丟掉頭
6.3.4 采用無限序列
6.3.5 delay和force宏
6.3.6 知識匯總:一個惰性的快速排序程序
6.4 小結
第7章 函數式編程
7.1 各種形式的函數
7.1.1 一等函數
7.1.2 高階函數
7.1.3 純函數
7.1.4 命名實參
7.1.5 使用前置條件和後置條件約束函數
7.2 閉包
7.3 遞歸思考
7.3.1 普通遞歸
7.3.2 尾遞歸和recur
7.3.3 勿忘trampoline
7.3.4 延續傳遞風格
7.4 知識匯總:A*尋路
7.4.1 A*實現
7.4.2 A*實現的筆記
7.5 小結
第4部分 大規模設計
第8章 宏
8.1 數據即代碼即數據
8.1.1 語法quote、反quote和拼接
8.1.2 宏之經驗談
8.2 定義控製結構
8.2.1 不用語法quote定義控製結構
8.2.2 使用語法quote和反quote定義控製結構
8.3 組閤form的宏
8.4 使用宏改變form
8.5 使用宏控製符號解析
8.5.1 迴指
8.5.2 (具有爭議地)有用的選擇性名字捕獲
8.6 使用宏管理資源
8.7 知識匯總:返迴函數的宏
8.8 小結
第9章 組閤數據與代碼
9.1 命名空間
9.1.1 創建命名空間
9.1.2 隻暴露所需
9.1.3 聲明性包含和排除
9.2 以通用設計模式探索Clojure多重方法
9.2.1 組成部分
9.2.2 用法
9.2.3 以多重方法拯救
9.2.4 處理繼承行為的特彆繼承
9.2.5 解析層次中的衝突
9.2.6 真正的最大功率任意分發
9.3 類型、協議和記錄
9.3.1 記錄
9.3.2 協議
9.3.3 用deftype從更原始的基礎開始構建
9.4 知識匯總:國際象棋移動的流暢構建器
9.4.1 Java實現
9.4.2 Clojure實現
9.5 小結
第10章 Java.next
10.1 使用proxy動態生成對象
10.2 Clojure gen-class和GUI程序設計
10.2.1 命名空間作為類的規範
10.2.2 以Clojure探索用戶界麵設計與開發
10.3 Clojure同Java數組的關係
10.3.1 數組的類型:原生與引用
10.3.2 數組可變性
10.3.3 那個不幸的命名約定
10.3.4 多維數組
10.3.5 調用可變方法/構造函數
10.4 所有Clojure函數都實現……
10.4.1 java.util.Comparator
10.4.2 java.lang.Runnable
10.4.3 java.util.concurrent.Callable
10.5 在Java API裏使用Clojure數據結構
10.5.1 java.util.List
10.5.2 java.lang.Comparable
10.5.3 java.util.RandomAccess
10.5.4 java.util.Collection
10.5.5 java.util.Set
10.6 definterface
10.7 慎用異常
10.7.1 一點異常的背景
10.7.2 運行時異常vs.編譯時異常
10.7.3 處理異常
10.7.4 定製異常
10.8 小結
第11章 變化
11.1 軟件事務性內存,包括多版本並發控製和快照隔離
11.1.1 事務
11.1.2 嵌入式事務
11.1.3 STM使其簡單的事情
11.1.4 潛在缺陷
11.1.5 讓STM不高興的事
11.2 使用Ref的時機
11.2.1 使用alter進行可協調的、同步的改變
11.2.2 以commute進行可交換的改變
11.2.3 以ref-set進行普通改變
11.2.4 用ensure修正寫入偏差
11.2.5 壓力之下的Ref
11.3 使用Agent的時機
11.3.1 進程內並發模型vs分布式並發模型
11.3.2 用Agent控製I/O
11.3.3 send和send-off之間的差異
11.3.4 錯誤處理
11.3.5 何時不用Agent
11.4 使用Atom的時機
11.4.1 跨綫程共享
11.4.2 在事務裏使用Atom
11.5 使用lock的時機
11.5.1 使用鎖進行安全變化
11.5.2 使用Java的顯式鎖
11.6 使用future的時機
11.7 使用promise的時機
11.7.1 以promise進行並行任務
11.7.2 迴調API到阻塞API
11.7.3 確定性死鎖
11.8 並行
11.8.1 pvalues
11.8.2 pmap
11.8.3 pcalls
11.9 var和動態綁定
11.9.1 binding宏
11.9.2 創建命名var
11.9.3 創建匿名var
11.9.4 動態作用域
11.10 小結
第5部分 雜項考量
第12章 性能
12.1 類型提示
12.1.1 類型修飾的優勢
12.1.2 類型提示實參和返迴值
12.1.3 類型提示對象
12.2 暫態(transient)
12.2.1 短暫的垃圾
12.2.2 暫態在效率上與可變集閤相比較
12.3 分塊序列
12.4 記憶
12.4.1 記憶再研究
12.4.2 記憶協議
12.5 理解強製轉型(coercion)
12.5.1 強製轉型第一原則:不要這麼做
12.5.2 推論:我們可能沒做對
12.5.3 強製轉型第二原則:不要這麼做
12.5.4 強製轉型第三原則:強製轉型穩定的局部量
12.5.5 強製轉型第四原則:觀測大小
12.5.6 強製轉型第五原則:隻在截取是目標時
12.6 小結
第13章 Clojure改變我們的思考方式
13.1 DSL
13.1.1 無所不在的DSL
13.1.2 將括號置於規範周圍
13.1.3 Clojure方式DSL的注記
13.2 測試
13.2.1 一些有用的技術
13.2.2 契約式程序設計
13.3 缺乏設計模式
13.4 錯誤處理和調試
13.4.1 錯誤處理
13.4.2 調試
13.5 珍重
附錄 資源
雜項資源
在綫資源
前言/序言
Clojure編程樂趣 下載 mobi epub pdf txt 電子書 格式
評分
☆☆☆☆☆
4.4.1 元數據
評分
☆☆☆☆☆
1.4 Clojure為何不是麵嚮對象的
評分
☆☆☆☆☆
和書店的比較過瞭,應該是正版圖書。價格可以,購買方便,送貨上門,網購就是好,我一下買瞭好幾本書。京東的物流很給力,送貨的速度還不錯,商品的質量也可以接受,價格也能比較公道。你,值得擁有!超低的價格,超好的質量,超高的品質,感謝京東,有你陪伴,真好!不錯,很喜歡。
評分
☆☆☆☆☆
2.5.2 局部量
評分
☆☆☆☆☆
1.3 函數式編程
評分
☆☆☆☆☆
要樂於做個女人擴大交際範圍 培養自己的好奇心:不感興趣的也要去,不管男性和女性都要興緻勃勃地活動。隻有這樣纔能讓人感受你的魅力,並讓人感受快樂的氣氛。 不要讓性格差異成為障礙:社交與選擇朋友不完全是一迴事。在社交過程中,不要用選擇朋友甚至是知心朋友的條件來作標準,凡是誌趣不符、性格不閤的人一概拒之門外。在社交圈中認識的新朋友應是與你有較大差彆的人纔好。朋友之間在知識結構、興趣愛好、生活經曆、氣質性格等方麵存... 每個人的行事都有兩個好理由:一是看起來很好;一是的確很好。 我們很難找到一個放之四海皆有效的法則,任何事情都會有一些例外。 如果沒有跡象顯示顧客有問題,最好要相信他們是誠心誠意願意付清賬款的。 我相信,那些有欺詐傾嚮的顧客,如你願意相信他們是誠實、正直和光明磊落的,大部分還是會做齣善良反應的。 激發他人去産生一種高尚的動機。有這麼一句神奇的妙語,它可以阻止人們辯論,消除他人産生的厭惡感,並給他人留下一個良好的印象。 這句話就是:“我一點也不奇怪你有這種感覺。如果我是你,也會與你的感覺一樣。” 人類普遍地追求同情。兒童迫切地顯示他的傷害;或甚至故意割傷或打傷,以收獲大量的同情。齣於同樣的理由,成人也會顯示他們的傷害,敘述他們的意外、疾病,特彆是動手術開刀的詳情。為真實的或想像的不幸而感到“自憐”,實際上,這差不多是人... 雙方為什麼會有那樣的思想和行為,其中自有一定的原因。探尋齣其中隱藏的原因來,你便得到瞭瞭解他人行動或人格的鑰匙。 永遠按照對方的觀點去想,由他人的立場去看事,一如由你自己的一樣,這或許不難成為影響你終身事業的一個關鍵因素。 生活中有時會發生這種情形:對方或許完全錯瞭,但他仍然不以為然。在這種情況下,不要指責他人,因為這是愚人的做法。你應該瞭解他,而隻有聰明、寬容、特殊的人纔會這樣做。 真誠地沒有人喜歡接受推銷,或被人強迫去做一件事。 我們都喜歡按照自己的意願購買東西,或照自己的意思行動,我們喜歡彆人徵詢我們的願望、需求和意見。 江海之所以能為百榖之王,是因為懂得身處低下,方能成為百榖之王。聖人若想領導人民,必須謙卑服務;若想引導人民,必須跟隨其後。因此,聖人雖在上,而人民不覺壓力;雖在前,而人民不覺有什麼傷害。 “江海所以能為百榖王者,以其善下之,故能為百榖王。是以欲上民必以言下之.. 你永遠不會因為認錯而引來麻煩。隻有如此纔能平息爭論,引導對方也能同你一樣公正寬大,甚至也承認他或許錯瞭。 彆與顧客、配偶或敵人發生衝突。彆指責他們的錯誤,彆惹他們動怒,如果非得與人發生對立,也得運用一點技巧。 你在教人的時候,要好像若無其事一樣。 事情要不知不覺地提齣來,好像被人遺忘一樣。 伽利略:你不能教人什麼,你隻能幫助他們去發現。 要比彆人聰明,但不要讓他們知道。 蘇格拉底:我唯一... 使人喜歡你的六種方法
評分
☆☆☆☆☆
6.3.2 理解lazy-seq的秘訣
評分
☆☆☆☆☆
1.3.2 函數式編程的內涵
評分
☆☆☆☆☆
1.1.5 一緻