更新时间:2019-01-01 19:48:15
封面
版权信息
内容提要
致谢
第1版序
第2版序
前言
第1章 启航
1.1 为什么是Clojure
1.1.1 Clojure非常优雅
1.1.2 Clojure是Lisp的再度崛起
1.1.3 为什么是Lisp
1.1.4 它是Lisp,但括号少了
1.1.5 Clojure是函数式语言
1.1.6 Clojure简化了并发编程
1.1.7 Clojure与Java虚拟机彼此亲密无间
1.2 Clojure编程快速入门
1.2.1 使用REPL
1.2.2 特殊变量
1.2.3 添加共享状态
1.3 探索Clojure的程序库
1.3.1 require和use
1.3.2 查找文档
1.4 小结
第2章 探索Clojure
2.1 形式
2.1.1 使用数值类型
2.1.2 符号
2.1.3 字符串与字符
2.1.4 布尔值与nil
2.1.5 映射表、关键字和记录
2.2 读取器宏
2.3 函数
2.3.1 匿名函数
2.3.2 何时使用匿名函数
2.4 变量、绑定和命名空间
2.4.1 绑定
2.4.2 解构
2.4.3 命名空间
2.5 调用Java
2.5.1 访问构造函数、方法和字段
2.5.2 Javadoc
2.6 流程控制
2.6.1 分支结构与if
2.6.2 用do引入副作用
2.6.3 循环与loop/recur
2.7 我的for循环哪儿去了
2.8 元数据
2.9 小结
第3章 一切皆序列
3.1 一切皆序列
3.2 使用序列库
3.2.1 创建序列
3.2.2 过滤序列
3.2.3 序列谓词
3.2.4 序列转换
3.3 惰性和无限序列
3.4 Java亦可序化
3.4.1 序化Java容器
3.4.2 序化正则表达式
3.4.3 序化文件系统
3.4.4 序化流
3.4.5 序化XML
3.5 调用特定于结构的函数
3.5.1 列表函数
3.5.2 向量函数
3.5.3 映射表函数
3.5.4 集合函数
3.6 小结
第4章 函数式编程
4.1 函数式编程理念
4.1.1 纯函数
4.1.2 持久性数据结构
4.1.3 惰性和递归
4.1.4 引用透明性
4.1.5 FP的优势
4.1.6 6条规则
4.2 怎样偷个懒
4.2.1 尾递归
4.2.2 自递归与recur
4.2.3 惰性序列
4.2.4 聊聊变现
4.2.5 丢弃头元素
4.3 懒上加懒
4.3.1 部分求值与部分应用
4.4 再议递归
4.4.1 转换为自递归
4.4.2 采用Trampolining技术
4.4.3 用惰性化替代递归
4.4.4 用快存为递归抄条近路
4.5 小结
第5章 状态
5.1 并发、并行和锁定
5.2 引用与软事务内存
5.2.1 ref-set
5.2.2 事务的属性
5.2.3 alter
5.2.4 STM的工作原理:MVCC
5.2.5 commute
5.2.6 alter优先