译者序
第1版赞誉
第2版序言
第1版序言
关于本书
致谢
第1章 Clojure简介
1.1 Clojure的概念以及采用的原因
1.1.1 Clojure:现代化的Lisp语言
1.1.2 Clojure:务实的函数式编程
1.1.3 JVM之上的Clojure
1.2 语言基础知识
1.2.1 Lisp语法
1.2.2 括号
1.3 宿主互操作性:JVM速成教程
1.3.1 Java类型、类和对象
1.3.2 点(.)和new运算符
1.3.3 线程和并发性
1.4 小结
第2章 Clojure要素:数据结构和函数
2.1 在REPL上编码
2.1.1 Clojure REPL
2.1.2 “Hello, world
2.1.3 用doc、find-doc和apropos查找文档
2.1.4 Clojure语法的另外几个要点
2.2 Clojure数据结构
2.2.1 nil、真值和假值
2.2.2 字符和字符串
2.2.3 Clojure数值
2.2.4 符号和关键字
2.2.5 列表
2.2.6 向量
2.2.7 映射
2.2.8 序列
2.3 程序结构
2.3.1 函数
2.3.2 let形式
2.3.3 do的副作用
2.3.4 读取器宏
2.4 程序流程
2.4.1 条件
2.4.2 逻辑函数
2.4.3 函数式循环
2.4.4 串行宏
2.5 小结
第3章 Clojure构件
3.1 元数据
3.1.1 Java类型提示
3.1.2 Java原始类型和数组类型
3.2 Java异常:try和throw
3.3 函数
3.3.1 定义函数
3.3.2 调用函数
3.3.3 高阶函数
3.3.4 编写高阶函数
3.3.5 匿名函数
3.3.6 关键字和符号
3.4 作用域
3.4.1 变量和绑定
3.4.2 重温let形式
3.4.3 词法闭包
3.5 命名空间
3.5.1 ns宏
3.5.2 使用命名空间
3.6 解构
3.6.1 向量绑定
3.6.2 映射绑定
3.7 读取器字面量
3.8 小结
第4章 多重方法多态
4.1 多态及其类型
4.1.1 参数化多态
4.1.2 随意多态
4.1.3 子类多态
4.2 用多重方法实现多态
4.2.1 不使用多重方法时的情况
4.2.2 使用多重方法实现随意多态
4.2.3 多分派
4.2.4 使用多重方法实现子类多态
4.3 小结
第5章 探索Clojure和Java互操作
5.1 从Clojure中调用Java
5.1.1 将Java类导入Clojure
5.1.2 创建实例
5.1.3 访问方法和域
5.1.4 宏和句点特殊形式
5.1.5 有助于使用Java的Clojure宏
5.1.6 实现接口和扩展类
5.2 将Clojure代码编译为Java字节码
5.2.1 示例:两个计算器的故事
5.2.2 用gen-class和gen-interface创建Java类和接口
5.3 从Java调用Clojure
5.4 小结
第6章 状态和并发的世界
6.1 状态存在的问题
6.1.1 共享状态的常见问题
6.1.2 传统解决方案
6.2 标识与值的分离
6.2.1 不可变值
6.2.2 对象和时间
6.2.3 不可变性和并发性
6.3 Clojure的方法
6.3.1 不可变性与性能
6.3.2 托管引用
6.4 引用
6.4.1 创建引用
6.4.2 引用突变
6.4.3 软件事务内存
6.5 代理
6.5.1 创建代理
6.5.2 代理突变
6.5.3 使用代理
6.5.4 STM事务中的副作用
6.6 原子
6.6.1 创建原子
6.6.2 原子突变
6.7 变量
6.7.1 创建变量和根绑定
6.7.2 变量绑定
6.8 状态及其统一访问模型
6.8.1 创建
6.8.2 读取
6.8.3 突变
6.8.4 事务
6.8.5 监视突变
6.9 决定使用哪种托管引用类别
6.10 future和promise
6.10.1 future
6.10.2 promise
6.11 小结
第7章 通过宏发展Clojure
7.1 宏的基础知识
7.1.1 文本替换
7.1.2 unless示例
7.1.3 宏模板
7.1.4 回顾:为什么使用宏
7.2 Clojure内部的宏
7.2.1 comment
7.2.2 declare
7.2.3 defonce
7.2.4 and
7.2.5 time
7.3 编写自己的宏
7.3.1 infix
7.3.2 randomly
7.3.3 defwebmethod
7.3.4 defnn
7.3.5 assert-true
7.4 小结
第8章 函数式编程深入研究
8.1 使用高阶函数
8.1.1 收集函数结果
8.1.2 对一系列事物进行归纳
8.1.3 过滤一系列事物
8.2 部分应用
8.2.1 函数适配
8.2.2 定义函数
8.3 闭包
8.3.1 自由变量与闭包
8.3.2 延迟计算与闭包
8.3.3 闭包与对象
8.3.4 一个Clojure对象系统
8.4 小结
第9章 协议、记录和类型
9.1 表达式问题
9.1.1 建立示例场景
9.1.2 对表达式问题的仔细观察和一些潜在的解决方案
9.1.3 Clojure多重方法解决方案
9.2 研究表达式问题的运算端
9.2.1 def-modus-operandi
9.2.2 detail-modus-operandi
9.2.3 跟踪你的操作方法