注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)其他編程語言/工具Clojure編程樂趣

Clojure編程樂趣

Clojure編程樂趣

定 價(jià):¥59.00

作 者: (美)Michael Fogus Chris Houser 著
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 編程語言與程序設(shè)計(jì) 計(jì)算機(jī)與互聯(lián)網(wǎng)

ISBN: 9787115319494 出版時(shí)間: 2013-11-01 包裝: 平裝
開本: 16開 頁數(shù): 318 字?jǐn)?shù):  

內(nèi)容簡介

  Clojure是一門Lisp方言。它通過函數(shù)式編程技術(shù),直接支持并發(fā)軟件開發(fā),得到眾多開發(fā)人員的歡迎?!禖lojure編程樂趣》并非Clojure初學(xué)指南,也不是一本Clojure的編程操作手冊,而是通過對Clojure詳盡地探究,教授函數(shù)式的程序設(shè)計(jì)方式,幫助讀者理解和體會Clojure編程的樂趣,進(jìn)而開發(fā)出優(yōu)美的軟件。全書分為5個(gè)部分共13章。第1部分是基礎(chǔ),包括第1章到第3章,從Clojure背后的思想開始,介紹了Clojure的基礎(chǔ)知識,并帶領(lǐng)讀者初步嘗試Clojure編程。第2部分包括第4章和第5章,介紹了Clojure的各種數(shù)據(jù)類型。第3部分是第6章和第7章,介紹了函數(shù)式編程的特性。第4部分包括第8章到第11章,分別介紹了宏、組合數(shù)據(jù)域代碼、Clojure對Java的調(diào)用,以及并發(fā)編程等較為高級的話題。第5部分為第12章和第13章,探討了Clojure的性能問題及其帶給我們的思考?!禖lojure編程樂趣》適合有一定基礎(chǔ)的Clojure程序員閱讀,進(jìn)而掌握函數(shù)編程的思考方法和程序設(shè)計(jì)方法,也可以作為讀者學(xué)習(xí)函數(shù)式編程的參考資料。

作者簡介

  Michael Fogus 是Clojure/core成員,在分布式模擬、機(jī)器視覺及專家系統(tǒng)方面擁有豐富的經(jīng)驗(yàn)。Chris Houser是Clojure 的關(guān)鍵貢獻(xiàn)者,曾實(shí)現(xiàn)了幾個(gè)重要的特性。

圖書目錄

第1部分 基礎(chǔ)
第1章 Clojure哲學(xué)
1.1 Clojure之道
1.1.1 簡單
1.1.2 專注
1.1.3 實(shí)用
1.1.4 清晰
1.1.5 一致
1.2 為何(又一種)Lisp
1.2.1 優(yōu)美
1.2.2 極度靈活
1.2.3 代碼即數(shù)據(jù)
1.3 函數(shù)式編程
1.3.1 一個(gè)可行的函數(shù)式編程定義
1.3.2 函數(shù)式編程的內(nèi)涵
1.4 Clojure為何不是面向?qū)ο蟮?br />1.4.1 定義術(shù)語
1.4.2 命令式“烘烤”
1.4.3 OOP提供的大多數(shù)東西,Clojure也有
1.5 小結(jié)
第2章 Clojure疾風(fēng)式教程
2.1 標(biāo)量
2.1.1 數(shù)字
2.1.2 整數(shù)
2.1.3 浮點(diǎn)數(shù)
2.1.4 有理數(shù)
2.1.5 符號
2.1.6 關(guān)鍵字
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 付諸實(shí)現(xiàn):函數(shù)
2.3.1 調(diào)用函數(shù)
2.3.2 定義函數(shù)
2.3.3 用def和defn簡化函數(shù)定義
2.3.4 以#()定義原位(in-place)函數(shù)
2.4 var
2.5 局部量、循環(huán)和block
2.5.1 block
2.5.2 局部量
2.5.3 循環(huán)
2.6 防止發(fā)生: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 訪問靜態(tài)類成員
2.7.2 創(chuàng)建Java實(shí)例
2.7.3 用.運(yùn)算符訪問Java實(shí)例成員
2.7.4 設(shè)置Java實(shí)例屬性
2.7.5 …宏
2.7.6 doto宏
2.7.7 定義類
2.8 異常環(huán)境
2.9 命名空間
2.9.1 用ns創(chuàng)建命名空間
2.9.2 用:require加載其他命名空間
2.9.3 用:use加載和創(chuàng)建映射
2.9.4 用:refer創(chuàng)建映射
2.9.5 用:import加載Java類
2.10 小結(jié)
第3章 小試牛刀
3.1 真值
3.1.1 什么是真
3.1.2 不要創(chuàng)建布爾對象
3.1.3 nil vs. false
3.2 小心翼翼nil雙關(guān)
3.3 解構(gòu)
3.3.1 你的任務(wù),你應(yīng)該選擇接受
3.3.2 解構(gòu)vector
3.3.3 解構(gòu)map
3.3.4 解構(gòu)函數(shù)參數(shù)
3.3.5 解構(gòu)vs.訪問器方法
3.4 用REPL做試驗(yàn)
3.4.1 試驗(yàn)seq
3.4.2 試驗(yàn)圖形化
3.4.3 知識匯總
3.4.4 出錯(cuò)之時(shí)
3.4.5 只為樂趣
3.5 小結(jié)
第2部分 數(shù)據(jù)類型
第4章 標(biāo)量
4.1 理解精度
4.1.1 截?cái)啵═runcation)
4.1.2 提升(Promotion)
4.1.3 上溢(Overflow)
4.1.4 下溢(Underflow)
4.1.5 舍入錯(cuò)誤(Rounding errors)
4.2 有理數(shù)
4.2.1 為什么是有理數(shù)
4.2.2 怎樣才是有理數(shù)
4.2.3 有理數(shù)的合理性
4.3 使用關(guān)鍵字的時(shí)機(jī)
4.3.1 關(guān)鍵字與符號有怎樣的差別
4.3.2 限定關(guān)鍵字
4.4 符號解析
4.4.1 元數(shù)據(jù)
4.4.2 符號與命名空間
4.4.3 Lisp-1
4.5 正則表達(dá)式--第二個(gè)問題
4.5.1 語法
4.5.2 函數(shù)
4.5.3 小心可變匹配器(matcher)
4.6 總結(jié)
第5章 組合數(shù)據(jù)類型
5.1 持久化、序列和復(fù)雜度
5.1.1 “你一直用著這個(gè)詞。我認(rèn)為,這并不意味著它就是你以為的含義”
5.1.2 序列術(shù)語及其含義
5.1.3 大O
5.2 vector:創(chuàng)建和使用其各種變體
5.2.1 構(gòu)建vector
5.2.2 大vector
5.2.3 vector當(dāng)做棧
5.2.4 使用vector而非reverse
5.2.5 子vector
5.2.6 vector當(dāng)做MapEntry
5.2.7 vector不是什么
5.3 list:Clojure代碼form的數(shù)據(jù)結(jié)構(gòu)
5.3.1 像Lisp那樣的list
5.3.2 list當(dāng)做棧
5.3.3 list不是什么
5.4 如何使用持久化隊(duì)列
5.4.1 什么都沒有的隊(duì)列
5.4.2 入隊(duì)
5.4.3 獲取
5.4.4 出隊(duì)
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 用數(shù)組map保持插入順序
5.7 知識匯總:在序列里查找某項(xiàng)的位置
5.8 小結(jié)
第3部分 函數(shù)式編程
第6章 惰性與不變性
6.1 關(guān)于不變性
6.1.1 定義不變性
6.1.2 固步自封-不變性
6.2 設(shè)計(jì)一個(gè)持久化玩具
6.3 惰性
6.3.1 以“邏輯與”熟悉惰性
6.3.2 理解lazy-seq的秘訣
6.3.3 丟掉頭
6.3.4 采用無限序列
6.3.5 delay和force宏
6.3.6 知識匯總:一個(gè)惰性的快速排序程序
6.4 小結(jié)
第7章 函數(shù)式編程
7.1 各種形式的函數(shù)
7.1.1 一等函數(shù)
7.1.2 高階函數(shù)
7.1.3 純函數(shù)
7.1.4 命名實(shí)參
7.1.5 使用前置條件和后置條件約束函數(shù)
7.2 閉包
7.3 遞歸思考
7.3.1 普通遞歸
7.3.2 尾遞歸和recur
7.3.3 勿忘trampoline
7.3.4 延續(xù)傳遞風(fēng)格
7.4 知識匯總:A*尋路
7.4.1 A*實(shí)現(xiàn)
7.4.2 A*實(shí)現(xiàn)的筆記
7.5 小結(jié)
第4部分 大規(guī)模設(shè)計(jì)
第8章 宏
8.1 數(shù)據(jù)即代碼即數(shù)據(jù)
8.1.1 語法quote、反quote和拼接
8.1.2 宏之經(jīng)驗(yàn)談
8.2 定義控制結(jié)構(gòu)
8.2.1 不用語法quote定義控制結(jié)構(gòu)
8.2.2 使用語法quote和反quote定義控制結(jié)構(gòu)
8.3 組合form的宏
8.4 使用宏改變form
8.5 使用宏控制符號解析
8.5.1 回指
8.5.2 (具有爭議地)有用的選擇性名字捕獲
8.6 使用宏管理資源
8.7 知識匯總:返回函數(shù)的宏
8.8 小結(jié)
第9章 組合數(shù)據(jù)與代碼
9.1 命名空間
9.1.1 創(chuàng)建命名空間
9.1.2 只暴露所需
9.1.3 聲明性包含和排除
9.2 以通用設(shè)計(jì)模式探索Clojure多重方法
9.2.1 組成部分
9.2.2 用法
9.2.3 以多重方法拯救
9.2.4 處理繼承行為的特別繼承
9.2.5 解析層次中的沖突
9.2.6 真正的最大功率任意分發(fā)
9.3 類型、協(xié)議和記錄
9.3.1 記錄
9.3.2 協(xié)議
9.3.3 用deftype從更原始的基礎(chǔ)開始構(gòu)建
9.4 知識匯總:國際象棋移動的流暢構(gòu)建器
9.4.1 Java實(shí)現(xiàn)
9.4.2 Clojure實(shí)現(xiàn)
9.5 小結(jié)
第10章 Java.next
10.1 使用proxy動態(tài)生成對象
10.2 Clojure gen-class和GUI程序設(shè)計(jì)
10.2.1 命名空間作為類的規(guī)范
10.2.2 以Clojure探索用戶界面設(shè)計(jì)與開發(fā)
10.3 Clojure同Java數(shù)組的關(guān)系
10.3.1 數(shù)組的類型:原生與引用
10.3.2 數(shù)組可變性
10.3.3 那個(gè)不幸的命名約定
10.3.4 多維數(shù)組
10.3.5 調(diào)用可變方法/構(gòu)造函數(shù)
10.4 所有Clojure函數(shù)都實(shí)現(xiàn)……
10.4.1 java.util.Comparator
10.4.2 java.lang.Runnable
10.4.3 java.util.concurrent.Callable
10.5 在Java API里使用Clojure數(shù)據(jù)結(jié)構(gòu)
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 一點(diǎn)異常的背景
10.7.2 運(yùn)行時(shí)異常vs.編譯時(shí)異常
10.7.3 處理異常
10.7.4 定制異常
10.8 小結(jié)
第11章 變化
11.1 軟件事務(wù)性內(nèi)存,包括多版本并發(fā)控制和快照隔離
11.1.1 事務(wù)
11.1.2 嵌入式事務(wù)
11.1.3 STM使其簡單的事情
11.1.4 潛在缺陷
11.1.5 讓STM不高興的事
11.2 使用Ref的時(shí)機(jī)
11.2.1 使用alter進(jìn)行可協(xié)調(diào)的、同步的改變
11.2.2 以commute進(jìn)行可交換的改變
11.2.3 以ref-set進(jìn)行普通改變
11.2.4 用ensure修正寫入偏差
11.2.5 壓力之下的Ref
11.3 使用Agent的時(shí)機(jī)
11.3.1 進(jìn)程內(nèi)并發(fā)模型vs分布式并發(fā)模型
11.3.2 用Agent控制I/O
11.3.3 send和send-off之間的差異
11.3.4 錯(cuò)誤處理
11.3.5 何時(shí)不用Agent
11.4 使用Atom的時(shí)機(jī)
11.4.1 跨線程共享
11.4.2 在事務(wù)里使用Atom
11.5 使用lock的時(shí)機(jī)
11.5.1 使用鎖進(jìn)行安全變化
11.5.2 使用Java的顯式鎖
11.6 使用future的時(shí)機(jī)
11.7 使用promise的時(shí)機(jī)
11.7.1 以promise進(jìn)行并行任務(wù)
11.7.2 回調(diào)API到阻塞API
11.7.3 確定性死鎖
11.8 并行
11.8.1 pvalues
11.8.2 pmap
11.8.3 pcalls
11.9 var和動態(tài)綁定
11.9.1 binding宏
11.9.2 創(chuàng)建命名var
11.9.3 創(chuàng)建匿名var
11.9.4 動態(tài)作用域
11.10 小結(jié)
第5部分 雜項(xiàng)考量
第12章 性能
12.1 類型提示
12.1.1 類型修飾的優(yōu)勢
12.1.2 類型提示實(shí)參和返回值
12.1.3 類型提示對象
12.2 暫態(tài)(transient)
12.2.1 短暫的垃圾
12.2.2 暫態(tài)在效率上與可變集合相比較
12.3 分塊序列
12.4 記憶
12.4.1 記憶再研究
12.4.2 記憶協(xié)議
12.5 理解強(qiáng)制轉(zhuǎn)型(coercion)
12.5.1 強(qiáng)制轉(zhuǎn)型第一原則:不要這么做
12.5.2 推論:我們可能沒做對
12.5.3 強(qiáng)制轉(zhuǎn)型第二原則:不要這么做
12.5.4 強(qiáng)制轉(zhuǎn)型第三原則:強(qiáng)制轉(zhuǎn)型穩(wěn)定的局部量
12.5.5 強(qiáng)制轉(zhuǎn)型第四原則:觀測大小
12.5.6 強(qiáng)制轉(zhuǎn)型第五原則:只在截取是目標(biāo)時(shí)
12.6 小結(jié)
第13章 Clojure改變我們的思考方式
13.1 DSL
13.1.1 無所不在的DSL
13.1.2 將括號置于規(guī)范周圍
13.1.3 Clojure方式DSL的注記
13.2 測試
13.2.1 一些有用的技術(shù)
13.2.2 契約式程序設(shè)計(jì)
13.3 缺乏設(shè)計(jì)模式
13.4 錯(cuò)誤處理和調(diào)試
13.4.1 錯(cuò)誤處理
13.4.2 調(diào)試
13.5 珍重
附錄 資源
雜項(xiàng)資源
在線資源

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.autoforsalebyowners.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號