Clojure编程
Chas Emerick, Brian Carper, Christophe Grand
徐明明, 杨寿勋 译
出版时间:2013年04月
页数:601
为什么选择Clojure?因为这个函数式编程语言不仅让你可以利用已有的Java类库、服务以及其他JVM平台资源,而且它能够跟其他动态语言如Ruby、Python相匹敌。有了本书的详细介绍,你可以通过一些示例来学习Clojure的基本原理,而这些示例会跟你已经熟悉的语言有关,示例所涉及的领域以及主题也是你每天工作都会接触到的。
我们通过一些日常的任务来探索Clojure的灵活性,比如Web编程、操作最流行的数据库等。你很快就会看到这门语言是如何帮你消除编程实践中的不必要的复杂性,并且给我们提供了解决困难问题的新思路——包括多线程编程。
· 使用Clojure不会浪费你在Java平台上的已有投资
· 理解Clojure作为JVM上的一门高效Lisp方言的优势
· 学习函数式编程如何帮忙消除常见的问题和错误
· 通过久经考验的工具使得并发多线程编程更可追踪、更可靠
· 消除代码对于冗长而复杂的设计模式的依赖
· 利用宏、数据、协议以及多重方法来构建抽象
· 部署大型Web应用到成百上千个云节点
  1. 前言
  2. 第1章 进入clojure 仙境
  3. 为什么要选择clojure?
  4. 获取clojure
  5. clojure repl
  6. 不!括号真的不会让你瞎了眼
  7. 表达式、操作符、语法以及优先级
  8. 同像性
  9. clojure reader
  10. 标量字面量
  11. 注释
  12. 空格和逗号
  13. 集合字面量
  14. reader 的一些其他语法糖
  15. 命名空间
  16. 符号求值
  17. 特殊形式
  18. 阻止求值:quote
  19. 代码块:do
  20. 定义var :def
  21. 本地绑定:let
  22. 解构(let,第2部分)
  23. 定义函数:fn
  24. 条件判断:if
  25. 循环:loop 和recur
  26. 引用var :var
  27. 和java 的互操作: 和new
  28. 异常处理:try 和throw
  29. 状态修改:set!
  30. 锁的原语:monitor-enter 和monitor-exit
  31. 小结
  32. eval
  33. 这只是开始
  34. 第1部分 函数式编程以及并发
  35. 第2章 函数式编程
  36. 所谓函数式编程,到底意味着什么?
  37. 谈谈值的重要性
  38. 关于值
  39. 值与可变对象的比较
  40. 一个关键性的选择
  41. 作为头等公民的函数以及高阶函数
  42. apply, partial
  43. 函数(功能)的组合
  44. 编写高阶函数
  45. 利用可组合的高阶函数构建一个日志系统
  46. 纯函数
  47. 为什么纯函数很有意思?
  48. 现实生活中的函数式编程
  49. 第3章 集合类与数据结构
  50. 抽象优于实现
  51. 集合:collection
  52. 序列:sequence
  53. associative
  54. 索引集合:indexed
  55. 栈:stack
  56. set
  57. 有序集合:sorted
  58. 访问集合元素的简洁方式
  59. 习惯用法
  60. 集合、key 以及高阶函数
  61. 数据结构的类型
  62. 列表:list
  63. vector
  64. set
  65. map
  66. 不可变性和持久性
  67. 持久性与结构共享
  68. 易变集合
  69. 元数据
  70. 用clojure 的集合来小试牛刀
  71. 标识符和循环引用
  72. 思维方式的改变:从命令式到函数式
  73. 遍历、更新以及zipper
  74. 总结
  75. 第4章 多线程和并发
  76. 计算在时间和空间内的转换
  77. delay
  78. future
  79. promise
  80. 简单的并行化
  81. 状态和标识
  82. clojure 的引用类型
  83. 并发操作的分类
  84. 原子类型(atom)
  85. 通知和约束
  86. 观察器
  87. 校验器
  88. ref
  89. 软件事务内存
  90. 对ref 进行修改的机制
  91. stm 的一些缺点
  92. var
  93. 定义var
  94. 动态作用域
  95. var 不是变量
  96. 前置声明
  97. agent
  98. 处理agent action 中的错误
  99. i/o、事务以及嵌套的send
  100. 使用java 的并发原语
  101. locking
  102. 总结
  103. 第2部分 构建抽象
  104. 第5章 宏
  105. 宏到底是什么?
  106. 宏不是什么
  107. 有什么是宏能做而函数不能做的
  108. 宏vsruby 的eval
  109. 编写你的第一个宏
  110. 调试宏
  111. 宏扩展
  112. 语法
  113. 引述和语法引述
  114. 反引述与编接反引述
  115. 什么时候使用宏
  116. 宏卫生
  117. gensym 来拯救
  118. 让宏的用户来选择名字
  119. 重复求值
  120. 宏的常见用法和模式
  121. 隐藏参数:&env 和 &form
  122. &env
  123. &form
  124. 测试上下文相关的宏
  125. 深入-> 和->>
  126. 总结
  127. 第6章 数据类型和协议
  128. 协议
  129. 扩展已有的类型
  130. 定义你自己的类型
  131. 记录
  132. 类型
  133. 实现协议
  134. 内联实现
  135. 重用实现
  136. 协议自省
  137. 协议函数分派的边界场景
  138. 自己实现一个set
  139. 总结
  140. 第7章 多重方法
  141. 多重方法基础
  142. 通往层级之路
  143. 层级
  144. 独立层级
  145. 真正实现多重!
  146. 还有几件事
  147. 多重继承
  148. 内省多重方法
  149. type 或class ;或者说,映射的报复
  150. 转发函数的范围是无限的
  151. 最后的思考
  152. 第3部分 工具、平台以及项目
  153. 第8章 clojure 项目的组织与构建
  154. 项目布局
  155. 定义与使用命名空间
  156. 位置、位置、位置
  157. clojure 代码库的功能组织
  158. 构建
  159. 提前编译
  160. 依赖管理
  161. maven 的依赖管理模型
  162. 构建工具与配置模式
  163. 最后的思考
  164. 第9章 java 及jvm 互操作
  165. jvm 是clojure 的基础
  166. java 类、方法和字段的使用
  167. 便利的互操作工具
  168. 异常与错误处理
  169. 摆脱检查型异常
  170. with-open :finally 的挽歌
  171. 为了效率进行类型提示
  172. 数组
  173. 定义类、实现接口
  174. 匿名类的实例:proxy
  175. 定义具名的类
  176. 注解
  177. 在java 里使用clojure
  178. 使用deftype 和defrecord 类
  179. 实现协议接口
  180. 乐于合作的伙伴
  181. 第10章 面向repl 的编程
  182. 交互式开发
  183. 持续、演化的环境
  184. 工具集
  185. 最简的repl
  186. eclipse
  187. emacs
  188. 在repl 里调试、监测和打补丁
  189. “已部署”repl 的特别考虑
  190. 重定义结构的限制
  191. 小结
  192. 第4部分 实战
  193. 第11章 数字与数学
  194. clojure 中的数字
  195. clojure 首选64 比特(或更大)的表示
  196. clojure 的混合数字模型
  197. 有理数
  198. 数字传播规则
  199. clojure 中的数学
  200. 有限与任意精度
  201. 无检查的操作
  202. 任意精度的小数操作的刻度和取整模式
  203. 相等与等值
  204. 对象相同(identical?)
  205. 引用相等(=)
  206. 数字等值(==)
  207. 优化数字效率
  208. 声明函数接受和返回原始类型
  209. 合理使用原始类型的数组
  210. 用clojure 可视化芒德布罗集
  211. 第12章 设计模式
  212. 依赖注入
  213. 策略模式
  214. 责任链
  215. 面向方面的编程
  216. 最后的思考
  217. 第13章 测试
  218. 不可变值与纯函数
  219. 模拟
  220. clojuretest
  221. 定义测试
  222. 测试“套件”
  223. fixtures
  224. html dsl 的成长
  225. 依赖断言
  226. 前条件和后条件
  227. 第14章 使用关系数据库
  228. clojurejavajdbc
  229. with-query-results 解析
  230. 事务
  231. 连接池
  232. korma
  233. 前奏
  234. 查询
  235. 为什么不嫌麻烦地用dsl ?
  236. hibernate
  237. 设置
  238. 持续数据
  239. 运行查询
  240. 去掉样板
  241. 最后的思考
  242. 第15章 使用非关系型数据库
  243. 安装couchdb 和clutch
  244. 基本的crud 操作
  245. 视图
  246. 一个简单的(javascript)视图
  247. 用clojure 写的视图
  248. _changes :把couchdb 滥用做消息队列
  249. 可随意点选的消息队列
  250. 最后的思考
  251. 第16章 clojure 与web
  252. clojure 栈
  253. 基石:ring
  254. 请求与应答
  255. 适配函数
  256. 处理函数
  257. 中间件
  258. 用compojure 路由请求
  259. 使用模板
  260. enlive :基于选择器的html 转换
  261. 最后的思考
  262. 第17章 部署clojure web应用程序
  263. java 与clojure web 架构
  264. web 应用程序打包
  265. 在本地运行web 应用
  266. web 应用程序部署
  267. 在amazon 的elastic beanstalk 上部署clojure 应用
  268. 超越简单web 应用程序部署
  269. 第5 部分 杂项
  270. 第18章 明智地选择clojure 类型定义形式
  271. 第19章 在工作场所引进clojure
  272. 事实是……
  273. 强调生产效率
  274. 强调社区
  275. 审慎
  276. 第20章 下一步?
  277. (dissoc clojure 'jvm)
  278. clojureclr
  279. clojurescript
  280. 4clojure
  281. overtone
  282. corelogic
  283. pallet
  284. avout
  285. heroku上的clojure
  286. 索引
书名:Clojure编程
译者:徐明明, 杨寿勋 译
国内出版社:电子工业出版社
出版时间:2013年04月
页数:601
书号:978-7-121-19718-5
原版书书名:Clojure Programming
原版书出版商:O'Reilly Media
Chas Emerick
 
Chas Emerick (cemerick.com)
Snowtide Informatics公司创始人,参与开发了Clojure语言本身以及很多开源项目。
 
 
Brian Carper
 
Brian Carper(briancarper.net)
心理学研究领域的职业程序员,创建了一个把Clojure代码编译成CSS代码的编译器以及一个操作关系型数据库的类库。
 
 
Christophe Grand
 
Christophe Grand(clj-me.cgrand.net)
活跃于法国里昂附近的独立咨询师,参与开发了Clojure语言,创建了Enlive和Moustache这两个类库。