图书介绍

Clojure编程乐趣PDF|Epub|txt|kindle电子书版本网盘下载

Clojure编程乐趣
  • (美)福格斯,(美)豪泽著;郑晔译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115319494
  • 出版时间:2013
  • 标注页数:318页
  • 文件大小:74MB
  • 文件页数:343页
  • 主题词:程序语言-语言设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Clojure编程乐趣PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1部分 基础3

第1章 Clojure哲学3

1.1 Clojure之道4

1.1.1 简单4

1.1.2 专注5

1.1.3 实用5

1.1.4 清晰6

1.1.5 一致7

1.2 为何(又一种)Lisp8

1.2.1 优美8

1.2.2 极度灵活9

1.2.3 代码即数据11

1.3 函数式编程11

1.3.1 一个可行的函数式编程定义11

1.3.2 函数式编程的内涵12

1.4 Clojure为何不是面向对象的12

1.4.1 定义术语12

1.4.2 命令式“烘烤”14

1.4.3 OOP提供的大多数东西,Clojure也有14

1.5 小结18

第2章 Clojure疾风式教程19

2.1 标量20

2.1.1 数字20

2.1.2 整数20

2.1.3 浮点数21

2.1.4 有理数21

2.1.5 符号22

2.1.6 关键字22

2.1.7 字符串22

2.1.8 字符22

2.2 组合起来:集合23

2.2.1 list23

2.2.2 vector23

2.2.3 map24

2.2.4 set24

2.3 付诸实现:函数24

2.3.1 调用函数24

2.3.2 定义函数25

2.3.3 用def和defn简化函数定义26

2.3.4 以#()定义原位(in-place)函数27

2.4 var27

2.5 局部量、循环和block28

2.5.1 block28

2.5.2 局部量28

2.5.3 循环29

2.6 防止发生:quote31

2.6.1 求值31

2.6.2 quote32

2.6.3 反quote34

2.6.4 反quote拼接34

2.6.5 auto-gensym35

2.7 与Java互操作35

2.7.1 访问静态类成员35

2.7.2 创建Java实例35

2.7.3 用运算符访问Java实例成员36

2.7.4 设置Java实例属性36

2.7.5 ..宏36

2.7.6 doto宏37

2.7.7 定义类37

2.8 异常环境37

2.9 命名空间38

2.9.1 用ns创建命名空间38

2.9.2 用:require加载其他命名空间39

2.9.3 用:use加载和创建映射40

2.9.4 用:refer创建映射41

2.9.5 用:import加载Java类41

2.1 0小结41

第3章 小试牛刀43

3.1 真值44

3.1.1 什么是真44

3.1.2 不要创建布尔对象44

3.1.3 nil vs.false45

3.2 小心翼翼nil双关45

3.3 解构46

3.3.1 你的任务,你应该选择接受47

3.3.2 解构vector47

3.3.3 解构map48

3.3.4 解构函数参数50

3.3.5 解构vs.访问器方法50

3.4 用REPL做试验50

3.4.1 试验seq51

3.4.2 试验图形化52

3.4.3 知识汇总53

3.4.4 出错之时54

3.4.5 只为乐趣55

3.5 小结56

第2部分 数据类型61

第4章 标量61

4.1 理解精度62

4.1.1 截断(Truncation)62

4.1.2 提升(Promotion)63

4.1.3 上溢(Overflow)63

4.1.4 下溢(Underflow)64

4.1.5 舍入错误(Rounding errors)64

4.2 有理数65

4.2.1 为什么是有理数65

4.2.2 怎样才是有理数66

4.2.3 有理数的合理性67

4.3 使用关键字的时机67

4.3.1 关键字与符号有怎样的差别68

4.3.2 限定关键字69

4.4 符号解析70

4.4.1 元数据71

4.4.2 符号与命名空间71

4.4.3 Lisp-172

4.5 正则表达式——第二个问题73

4.5.1 语法73

4.5.2 函数74

4.5.3 小心可变匹配器(matcher)75

4.6 总结75

第5章 组合数据类型76

5.1 持久化、序列和复杂度77

5.1.1 “你一直用着这个词。我认为,这并不意味着它就是你以为的含义”77

5.1.2 序列术语及其含义78

5.1.3 大O81

5.2 vector:创建和使用其各种变体82

5.2.1 构建vector82

5.2.2 大vector83

5.2.3 vector当做栈86

5.2.4 使用vector而非reverse87

5.2.5 子vector87

5.2.6 vector当做MapEntry88

5.2.7 vector不是什么89

5.3 list:Clojure代码form的数据结构90

5.3.1 像Lisp那样的list90

5.3.2 list当做栈91

5.3.3 list不是什么91

5.4 如何使用持久化队列91

5.4.1 什么都没有的队列92

5.4.2 入队93

5.4.3 获取93

5.4.4 出队93

5.5 持久化set94

5.5.1 Clojure set的基本属性94

5.5.2 用sorted-set保持set的顺序95

5.5.3 contains?96

5.5.4 cloiure.set96

5.6 思考map98

5.6.1 hash map98

5.6.2 以有序map保持键值的顺序99

5.6.3 用数组map保持插入顺序101

5.7 知识汇总:在序列里查找某项的位置101

5.8 小结104

第3部分 函数式编程107

第6章 惰性与不变性107

6.1 关于不变性107

6.1.1 定义不变性108

6.1.2 固步自封——不变性108

6.2 设计一个持久化玩具110

6.3 惰性113

6.3.1 以“逻辑与”熟悉惰性113

6.3.2 理解lazy-seq的秘诀115

6.3.3 丢掉头117

6.3.4 采用无限序列118

6.3.5 delay和force宏119

6.3.6 知识汇总:一个惰性的快速排序程序121

6.4 小结124

第7章 函数式编程125

7.1 各种形式的函数125

7.1.1 一等函数126

7.1.2 高阶函数129

7.1.3 纯函数131

7.1.4 命名实参132

7.1.5 使用前置条件和后置条件约束函数133

7.2 闭包135

7.3 递归思考141

7.3.1 普通递归141

7.3.2 尾递归和recur143

7.3.3 勿忘trampoline145

7.3.4 延续传递风格147

7.4 知识汇总:A*寻路149

7.4.1 A*实现150

7.4.2 A*实现的笔记153

7.5 小结153

第4部分 大规模设计157

第8章 宏157

8.1 数据即代码即数据158

8.1.1 语法quote、反quote和拼接159

8.1.2 宏之经验谈160

8.2 定义控制结构161

8.2.1 不用语法quote定义控制结构161

8.2.2 使用语法quote和反quote定义控制结构162

8.3 组合form的宏163

8.4 使用宏改变form165

8.5 使用宏控制符号解析168

8.5.1 回指169

8.5.2 (具有争议地)有用的选择性名字捕获170

8.6 使用宏管理资源171

8.7 知识汇总:返回函数的宏172

8.8 小结175

第9章 组合数据与代码176

9.1 命名空间176

9.1.1 创建命名空间177

9.1.2 只暴露所需179

9.1.3 声明性包含和排除181

9.2 以通用设计模式探索Clojure多重方法182

9.2.1 组成部分 183

9.2.2 用法184

9.2.3 以多重方法拯救184

9.2.4 处理继承行为的特别继承185

9.2.5 解析层次中的冲突186

9.2.6 真正的最大功率任意分发187

9.3 类型、协议和记录188

9.3.1 记录188

9.3.2 协议191

9.3.3 用deftype从更原始的基础开始构建199

9.4 知识汇总:国际象棋移动的流畅构建器201

9.4.1 Java实现201

9.4.2 Clojure实现203

9.5 小结205

第10章 Java.next206

10.1 使用proxy动态生成对象207

10.2 Clojure gen-class和GUI程序设计211

10.2.1 命名空间作为类的规范211

10.2.2 以Clojure探索用户界面设计与开发214

10.3 Clojure同Java数组的关系217

10.3.1 数组的类型:原生与引用217

10.3.2 数组可变性219

10.3.3 那个不幸的命名约定220

10.3.4 多维数组221

10.3.5 调用可变方法/构造函数221

10.4 所有Clojure函数都实现222

10.4.1 iava.util.Comparator222

10.4.2 java.lang.Runnable223

10.4.3 java.util.concurrent.Callable223

10.5 在Java API里使用Clojure数据结构224

10.5.1 java.util.List224

10.5.2 java.lang.Comparable225

10.5.3 java.util.RandomAccess225

10.5.4 java.util.Collection225

10.5.5 java.util.Set226

10.6 definterface227

10.7 慎用异常229

10.7.1 一点异常的背景229

10.7.2 运行时异常vs.编译时异常230

10.7.3 处理异常231

10.7.4 定制异常232

10.8 小结233

第11章 变化234

11.1 软件事务性内存,包括多版本并发控制和快照隔离235

11.1.1 事务235

11.1.2 嵌入式事务237

11.1.3 STM使其简单的事情237

11.1.4 潜在缺陷238

11.1.5 让STM不高兴的事239

11.2 使用Ref的时机240

11.2.1 使用alter进行可协调的、同步的改变241

11.2.2 以commute进行可交换的改变244

11.2.3 以ref-set进行普通改变245

11.2.4 用ensure修正写入偏差245

11.2.5 压力之下的Ref246

11.3 使用Agent的时机247

11.3.1 进程内并发模型vs分布式并发模型248

11.3.2 用Agent控制I/O249

11.3.3 send和send-off之间的差异251

11.3.4 错误处理252

11.3.5 何时不用Agent254

11.4 使用Atom的时机255

11.4.1 跨线程共享255

11.4.2 在事务里使用Atom256

11.5 使用lock的时机258

11.5.1 使用锁进行安全变化259

11.5.2 使用Java的显式锁260

11.6 使用future的时机261

11.7 使用promise的时机264

11.7.1 以promise进行并行任务265

11.7.2 回调API到阻塞API266

11.7.3 确定性死锁267

11.8 并行267

11.8.1 pvalues268

11.8.2 pmap268

11.8.3 pcalls269

11.9 var和动态绑定269

11.9.1 binding宏270

11.9.2 创建命名var271

11.9.3 创建匿名var272

11.9.4 动态作用域273

11.1 0小结274

第5部分 杂项考量277

第12章 性能277

12.1 类型提示277

12.1.1 类型修饰的优势278

12.1.2 类型提示实参和返回值278

12.1.3 类型提示对象279

12.2 暂态(transient)280

12.2.1 短暂的垃圾280

12.2.2 暂态在效率上与可变集合相比较280

12.3 分块序列282

12.4 记忆283

12.4.1 记忆再研究284

12.4.2 记忆协议284

12.5 理解强制转型(coercion)287

12.5.1 强制转型第一原则:不要这么做287

12.5.2 推论:我们可能没做对287

12.5.3 强制转型第二原则:不要这么做289

12.5.4 强制转型第三原则:强制转型稳定的局部量289

12.5.5 强制转型第四原则:观测大小289

12.5.6 强制转型第五原则:只在截取是目标时289

12.6 小结290

第13章 Clojure改变我们的思考方式291

13.1 DSL292

13.1.1 无所不在的DSL292

13.1.2 将括号置于规范周围293

13.1.3 Clojure方式DSL的注记296

13.2 测试297

13.2.1 一些有用的技术297

13.2.2 契约式程序设计300

13.3 缺乏设计模式301

13.4 错误处理和调试304

13.4.1 错误处理304

13.4.2 调试306

13.5 珍重310

附录 资源312

杂项资源312

在线资源317

热门推荐