当前位置:首页 > 程序设计 >
《Clojure编程乐趣》电子书封面

Clojure编程乐趣

  • 发布时间:2020年05月30日 09:24:56
  • 作者:Michael Fogus 福格斯 Ch
  • 大小:83.4 MB
  • 类别:Clojure电子书
  • 格式:PDF
  • 版本:第2版
  • 评分:8.6

    Clojure编程乐趣 PDF 第2版

      给大家带来的一篇关于Clojure相关的电子书资源,介绍了关于Clojure、Clojure编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小83.4 MB,Michael Fogus 福格斯 Ch编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:8.3。

      内容介绍

      这既并不是一本Clojure入门手册,也不是一本Clojure的编程操作指南。这书根据对Clojure详细地研究,叙述涵数式的编程设计方法,协助读者了解和感受Clojure编程的快乐,从而开发设计出幽美的手机软件。

      由福菲德、豪泽著的《Clojure编程乐趣(第2版)》分成六个一部分共17章。第一一部分是基本,包含第一~3章,从Clojure身后的观念刚开始,介绍了Clojure的基本知识,并领着读者基本试着Clojure编程。第二一部分是第四章和第五章,介绍了Clojure的各种各样基本数据类型。第三一部分是第六章和第7章,介绍了涵数式编程的特点。第四一部分是第八章~11章,各自介绍了宏、组成数据信息域代码、Clojure对Java的启用,及其并发编程等比较高級的话题讨论。第五一部分为第12章和第13章,讨论了Clojure的性能难题以及带来大家的思考。第六一部分为第14~17章,介绍了朝向数据信息编程、性能、思考程序流程及其Clojure的思考方法。

      这书合适要想转为涵数式語言或开展并发编程的程序猿阅读文章,对JVM服务平台编程很感兴趣的程序猿,要想学习培训高级的Java程序流程及其Clojure的读者,均可以从这当中获利。

      目录

      • 第1部分 基 础
      • 第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 为何(又一种)Lisp 8
      • 1.2.1 优美 8
      • 1.2.2 极度灵活 9
      • 1.3 函数式编程 15
      • 1.3.1 一个可行的函数式编程
      • 定义 15
      • 1.3.2 函数式编程的内涵 16
      • 1.4 Clojure为何不是面向
      • 对象的 16
      • 1.4.1 定义术语 16
      • 1.4.2 命令式“烘烤” 18
      • 1.4.3 OOP提供的大多数东西,
      • Clojure也有 18
      • 1.5 小结 23
      • 第2章 Clojure疾风式教程 24
      • 2.1 基本数据类型 25
      • 2.1.1 数字 25
      • 2.1.2 整数 25
      • 2.1.3 浮点数 26
      • 2.1.4 有理数 26
      • 2.1.5 符号 27
      • 2.1.6 关键字 27
      • 2.1.7 字符串 27
      • 2.1.8 字符 28
      • 2.2 组合起来:集合 28
      • 2.2.1 list 28
      • 2.2.2 vector 29
      • 2.2.3 map 29
      • 2.2.4 set 29
      • 2.3 付诸实现:函数 29
      • 2.4 var 30
      • 2.5 函数 30
      • 2.5.1 匿名函数 31
      • 2.5.2 使用def和defn定义命名
      • 函数 31
      • 2.5.3 不同参数数量的函数 32
      • 2.5.4 以#()定义原位(in-place)
      • 函数 33
      • 2.6 局部量、循环和block 33
      • 2.6.1 block 34
      • 2.6.2 局部量 34
      • 2.6.3 循环 35
      • 2.7 防止发生:quote 37
      • 2.7.1 求值 37
      • 2.7.2 Quoting 38
      • 2.7.3 反quote 40
      • 2.7.4 反quote拼接 41
      • 2.7.5 auto-gensym 41
      • 2.8 与Java互操作 41
      • 2.8.1 访问静态类成员(仅限于
      • Clojure) 41
      • 2.8.2 创建Java实例 42
      • 2.8.3 用.运算符访问Java实例
      • 成员 42
      • 2.8.4 设置Java实例属性 43
      • 2.8.5 ..宏 43
      • 2.8.6 doto宏 44
      • 2.8.7 定义类 44
      • 2.9 异常环境 44
      • 2.10 命名空间 45
      • 2.10.1 用ns创建命名空间 45
      • 2.10.2 用:require加载其他命名
      • 空间 46
      • 2.10.3 用:refer加载和创建
      • 映射 47
      • 2.10.4 用:refer创建映射 47
      • 2.10.5 用:import加载Java类 48
      • 2.11 小结 48
      • 第3章 小试牛刀 49
      • 3.1 真值 50
      • 3.1.1 什么是真 50
      • 3.1.2 不要创建布尔对象 50
      • 3.1.3 nil vs. false 51
      • 3.2 小心翼翼nil双关 51
      • 3.3 解构 53
      • 3.3.1 你的任务,你应该选择
      • 接受 53
      • 3.3.2 解构vector 53
      • 3.3.3 解构map 55
      • 3.3.4 解构函数参数 57
      • 3.3.5 解构vs.访问器方法 57
      • 3.4 用REPL做试验 57
      • 3.4.1 试验seq 57
      • 3.4.2 试验图形化 59
      • 3.4.3 知识汇总 60
      • 3.4.4 出错之时 61
      • 3.4.5 只为乐趣 62
      • 3.5 小结 63
      • 第2部分 数 据 类 型
      • 第4章 标量 67
      • 4.1 理解精度 68
      • 4.1.1 截断(Truncation) 68
      • 4.1.2 提升(Promotion) 69
      • 4.1.3 上溢(Overflow) 69
      • 4.1.4 下溢(Underflow) 70
      • 4.1.5 舍入错误(Rounding
      • errors) 70
      • 4.2 有理数 71
      • 4.2.1 为什么是有理数 71
      • 4.2.2 怎样才是有理数 72
      • 4.2.3 有理数的合理性 73
      • 4.3 使用关键字的时机 73
      • 4.3.1 关键字的应用 73
      • 4.3.2 限定关键字 75
      • 4.4 符号解析 76
      • 4.4.1 元数据 77
      • 4.4.2 符号与命名空间 78
      • 4.4.3 Lisp-1 78
      • 4.5 正则表达式——第二个
      • 问题 79
      • 4.5.1 语法 79
      • 4.5.2 函数 80
      • 4.5.3 小心可变匹配器
      • (matcher) 81
      • 4.6 总结 81
      • 第5章 组合数据类型 82
      • 5.1 持久化、序列和
      • 复杂度 83
      • 5.1.1 “你一直用着这个词。我认
      • 为,这并不意味着它就是你
      • 以为的含义” 83
      • 5.1.2 序列术语及其含义 84
      • 5.1.3 大O 87
      • 5.2 vector:创建和使用其各种
      • 变体 89
      • 5.2.1 构建vector 89
      • 5.2.2 大vector 90
      • 5.2.3 vector当作栈 93
      • 5.2.4 使用vector而非reverse 94
      • 5.2.5 子vector 95
      • 5.2.6 vector当作MapEntry 95
      • 5.2.7 vector不是什么 96
      • 5.3 list:Clojure代码form的
      • 数据结构 97
      • 5.3.1 像Lisp那样的list 97
      • 5.3.2 list当作栈 98
      • 5.3.3 list不是什么 98
      • 5.4 如何使用持久化队列 99
      • 5.4.1 什么都没有的队列 99
      • 5.4.2 入队 100
      • 5.4.3 获取 101
      • 5.4.4 出队 101
      • 5.5 持久化set 101
      • 5.5.1 Clojure set的基本
      • 属性 101
      • 5.5.2 用sorted-set保持set的
      • 顺序 103
      • 5.5.3 contains 103
      • 5.5.4 clojure.set 104
      • 5.6 思考map 106
      • 5.6.1 hash map 106
      • 5.6.2 以有序map保持键值的
      • 顺序 107
      • 5.6.3 用数组map保持插入
      • 顺序 108
      • 5.7 知识汇总:在序列里查找
      • 某项的位置 109
      • 5.8 小结 111
      • 第3部分 函数式编程
      • 第6章 惰性与不变性 115
      • 6.1 关于不变性:按照自己的
      • 方式去使用 115
      • 6.1.1 什么是不变性? 116
      • 6.1.2 不变性可以做什么? 116
      • 6.2 设计一个持久化
      • 玩具 118
      • 6.3 惰性 121
      • 6.3.1 以“逻辑与”熟悉惰性 122
      • 6.3.2 理解lazy-seq的秘诀 123
      • 6.3.3 丢掉头 126
      • 6.3.4 采用无限序列 126
      • 6.3.5 delay和force宏 128
      • 6.4 知识汇总:一个惰性的
      • 快速排序程序 130
      • 6.4 小结 133
      • 第7章 函数式编程 134
      • 7.1 各种形式的函数 134
      • 7.1.1 一等函数 135
      • 7.1.2 高阶函数 138
      • 7.1.3 纯函数 141
      • 7.1.4 命名实参 143
      • 7.1.5 使用前置条件和后置条件
      • 约束函数 143
      • 7.2 闭包 145
      • 7.2.1 函数返回闭包 146
      • 7.2.2 隐藏参数 147
      • 7.2.3 将闭包当作函数传递 148
      • 7.3 递归思考 152
      • 7.3.1 普通递归 152
      • 7.3.2 尾递归和recur 155
      • 7.3.3 勿忘trampoline 157
      • 7.3.4 延续传递风格 159
      • 7.4 知识汇总:A*寻路 161
      • 7.4.1 世界 161
      • 7.4.2 近邻 161
      • 7.4.3 A*实现 163
      • 7.4.4 A*实现的笔记 165
      • 7.5 小结 166
      • 第4部分 大规模设计
      • 第8章 宏 169
      • 8.1 数据即代码即数据 170
      • 8.1.1 语法quote、反quote和
      • 拼接 171
      • 8.1.2 宏之经验谈 173
      • 8.2 定义控制结构 173
      • 8.2.1 不用语法quote定义控制
      • 结构 174
      • 8.2.2 使用语法quote和反quote
      • 定义控制结构 175
      • 8.3 组合form的宏 176
      • 8.4 使用宏改变form 177
      • 8.5 使用宏控制符号解析
      • 时间 181
      • 8.5.1 回指 181
      • 8.5.2 (可能)有用的选择性名字
      • 捕获 182
      • 8.6 使用宏管理资源 183
      • 8.7 知识汇总:返回函数的
      • 宏 184
      • 8.8 小结 187
      • 第9章 组合数据与代码 188
      • 9.1 命名空间 188
      • 9.1.1 创建命名空间 189
      • 9.1.2 只暴露所需 191
      • 9.1.3 声明性包含和排除 194
      • 9.2 以通用设计模式探索
      • Clojure多重方法 194
      • 9.2.1 组成部分 195
      • 9.2.2 用法 196
      • 9.2.3 以多重方法拯救 197
      • 9.2.4 处理继承行为的特别
      • 继承 197
      • 9.2.5 解析层次中的冲突 198
      • 9.2.6 真正的最大功率任意
      • 分发 199
      • 9.3 类型、协议和记录 200
      • 9.3.1 记录 200
      • 9.3.2 协议 203
      • 9.3.3 用deftype从更原始的
      • 基础开始构建 211
      • 9.4 知识汇总:国际象棋
      • 移动的流畅构建器 213
      • 9.4.1 Java实现 213
      • 9.4.2 Clojure实现 215
      • 9.5 小结 217
      • 第10章 变化和并发 218
      • 10.1 使用Ref的时机 219
      • 10.1.1 利用ref构建可变
      • 棋盘 221
      • 10.1.2 事务 223
      • 10.1.3 嵌入式事务 225
      • 10.1.4 STM使其简单的
      • 事情 225
      • 10.1.5 潜在缺陷 226
      • 10.1.6 让STM不高兴的事 227
      • 10.2 利用refs重构 228
      • 10.2.1 解决棋盘例子 228
      • 10.2.2 以commute进行可交换的
      • 改变 230
      • 10.2.3 以ref-set进行普通
      • 改变 231
      • 10.2.4 压力之下的Ref 232
      • 10.3 使用Agent的时机 233
      • 10.3.1 进程内并发模型vs分布式
      • 并发模型 234
      • 10.3.2 用Agent控制I/O 235
      • 10.3.3 send和send-off之间的
      • 差异 237
      • 10.3.4 错误处理 239
      • 10.3.5 何时不用Agent 241
      • 10.4 使用Atom的时机 241
      • 10.4.1 跨线程共享 242
      • 10.4.2 在事务里使用Atom 242
      • 10.5 使用lock的时机 244
      • 10.5.1 使用锁进行安全
      • 变化 245
      • 10.5.2 使用Java的显式锁 246
      • 10.6 var和动态绑定 248
      • 10.6.1 binding宏 248
      • 10.6.2 创建命名var 250
      • 10.6.3 创建匿名var 251
      • 10.6.4 动态作用域 251
      • 10.7 小结 253
      • 第11章 并行 254
      • 11.1 使用future的时机 255
      • 11.2 使用promise的
      • 时机 259
      • 11.2.1 以promise进行并行
      • 任务 260
      • 11.2.2 回调API到阻塞API 261
      • 11.2.3 确定性死锁 262
      • 11.3 并行 263
      • 11.3.1 pvalues 263
      • 11.3.2 pmap 263
      • 11.3.3 pcalls 264
      • 11.4 reduce/fold 264
      • 11.5 小结 265
      • 第5部分 宿主共生关系
         
      • 第12章 Java.next 269
      • 12.1 使用proxy动态生成
      • 对象 270
      • 12.2 Clojure gen-class和
      • GUI程序设计 277
      • 12.2.1 命名空间作为类的
      • 规范 277
      • 12.2.2 命名空间编译内幕 280
      • 12.2.3 以Clojure探索用户界面
      • 设计与开发 281
      • 12.3 Clojure同Java数组的
      • 关系 284
      • 12.3.1 数组的类型:原生与
      • 引用 284
      • 12.3.2 数组可变性 286
      • 12.3.3 那个不幸的命名
      • 约定 286
      • 12.3.4 多维数组 287
      • 12.3.5 调用可变方法/构造
      • 函数 288
      • 12.4 所有Clojure函数都
      • 实现…… 288
      • 12.4.1 java.util.Comparator 288
      • 12.4.2 java.lang.Runnable 289
      • 12.4.3 java.util.concurrent.
      • Callable 290
      • 12.5 在Java API里使用
      • Clojure数据结构 290
      • 12.5.1 java.util.List 291
      • 12.5.2 java.lang.Comparable 291
      • 12.5.3 java.util.RandomAccess 292
      • 12.5.4 java.util.Collection 292
      • 12.5.5 java.util.Set 293
      • 12.6 definterface 293
      • 12.7 慎用异常 295
      • 12.7.1 一点异常的背景 296
      • 12.7.2 运行时异常vs.编译时
      • 异常 296
      • 12.7.3 处理异常 298
      • 12.7.4 定制异常 299
      • 12.8 小结 300
      • 第13章 ClojureScript 301
      • 13.1 实现VS接口 302
      • 13.2 编译器内部:分析和
      • 发布 305
      • 13.2.1 编译步骤 305
      • 13.2.2 Web Audio 307
      • 13.2.3 高级编译 311
      • 13.2.4 生成extern.js文件 313
      • 13.3 编译和运行 315
      • 13.4 小结 319
      • 第6部分 杂 项 考 量
      • 第14章 面向数据编程 323
      • 14.1 代码是代码,数据是
      • 数据 323
      • 14.1.1 严格的分界 324
      • 14.1.2 ORMG 325
      • 14.1.3 从数据中获取信息的
      • 一般方式 326
      • 14.1.4 PLOP 327
      • 14.2 数据就是数据 327
      • 14.2.1 值的好处 328
      • 14.2.2 标签符号 332
      • 14.3 数据就是代码 335
      • 14.3.1 数据可编程引擎 335
      • 14.3.2 可编程数据引擎的
      • 例子 336
      • 14.3.3 例子:简单的事件
      • 来源 337
      • 14.4 代码就是数据,也是
      • 代码 345
      • 14.4.1 哈特的发现和
      • 同像性 346
      • 14.4.2 Clojure代码就是
      • 数据 346
      • 14.4.3 规范括号 346
      • 14.5 小节 349
      • 第15章 性能 351
      • 15.1 类型提示 352
      • 15.1.1 类型修饰的优势 352
      • 15.1.2 类型提示实参和
      • 返回值 352
      • 15.1.3 类型提示对象 354
      • 15.2 暂态(transient) 354
      • 15.2.1 短暂的垃圾 354
      • 15.2.2 暂态在效率上与可变集合
      • 相比较 355
      • 15.3 分块序列 356
      • 15.4 记忆 358
      • 15.4.1 记忆再研究 359
      • 15.4.2 记忆协议 359
      • 15.4.3 面向抽象编程 361
      • 15.5 理解强制转型
      • (coercion) 361
      • 15.5.1 使用原始类型long 362
      • 15.5.2 使用原生double 364
      • 15.5.3 使用自动提升精度 365
      • 15.6 可缩小的 366
      • 15.6.1 简单的精简集合的
      • 例子 366
      • 15.6.2 派生第一个reducse函数
      • 变种 367
      • 15.6.3 更多的可还原函数的
      • 转换器 369
      • 15.6.4 reducible转换器 371
      • 15.6.5 reducible的性能 372
      • 15.6.6 reducible的缺陷 372
      • 15.6.7 整合reducible到Clojure
      • reduce 373
      • 15.6.8 fold函数:并行的
      • reduce 374
      • 15.7 小结 377
      • 第16章 思考程序 378
      • 16.1 搜索问题 378
      • 16.2 统一思考数据 383
      • 16.2.1 潜在的平等性或
      • 满足性 384
      • 16.2.2 替换 387
      • 16.2.3 一致性 388
      • 16.3 关于core.logic 390
      • 16.3.1 都是关于一致性 390
      • 16.3.2 关系型 391
      • 16.3.3 子目标 394
      • 16.4 约束 397
      • 16.4.1 约束编程介绍 397
      • 16.4.2 通过有限域限制
      • 绑定 399
      • 16.4.3 利用有限域解决数独
      • 问题 400
      • 16.5 小结 403
      • 第17章 Clojure改变我们的
      • 思考方式 405
      • 17.1 DSL 406
      • 17.1.1 无所不在的DSL 406
      • 17.1.2 实现类似SQL的DSL用于
      • 生成查询 408
      • 17.1.3 Clojure方式DSL的
      • 注记 413
      • 17.2 测试 413
      • 17.2.1 一些有用的技术 414
      • 17.2.2 契约式程序设计 416
      • 17.3 缺乏设计模式 417
      • 17.4 错误处理和调试 426
      • 17.4.1 错误处理 426
      • 17.4.2 调试 429
      • 17.5 珍重 433
      • 附录 资源 434
      • Miscellaneous resources 434
      • Online resources 440

      学习笔记

      了解java中的Clojure如何抽象并发性和共享状态

      前言 在所有 Java 下一代语言中,Clojure 拥有最激进的并发性机制和功能。Groovy 和 Scala 都为并发性提供了改善的抽象和语法糖的一种组合,而 Clojure 坚持了它始终在 JVM 上提供独一无二的行为的强硬立场。在本期 Java 下一代 中,我将介绍 Clojure 中众多并发性选项的一部分。首先是为 Clojure 中易变的引用提供支撑的基础抽象:epochal 时间模型。 Epochal 事件模型 或许 Clojure 与其他语言最显著的区别与易变的状态和值 密切相关。Clojure 中的值 可以是任何用户感兴趣的数据:数字 42、映射结构 {:first-name "Neal :last-name "Ford"} 或某些更大型的数据结构,比如 Wikipedia。基本来讲,Clojure 语言对待所有值就像其他语言对……

      以上就是本次介绍的Clojure电子书的全部相关内容,希望我们整理的资源能够帮助到大家,感谢大家对码农之家的支持。

      上一篇:现代前端技术解析

      下一篇:Druid实时大数据分析原理与实践

      展开 +

      收起 -

      • 《Clojure编程乐趣》PDF下载

      下载地址:百度网盘下载
      Clojure相关电子书
      C专家编程
      C专家编程 超清版 立即下载
      Java线程与并发编程实践
      Java线程与并发编程实践 超清中文版

      本书全面介绍Java多线程编程技术,针对Java 8中的线程特性和并发工具的快速学习和实践指南,适合有一定基础的Java程序员阅读学习,尤其适合想要掌握Java线程和并发工具的读者阅读参考

      立即下载
      Linux Shell编程从初学到精通
      Linux Shell编程从初学到精通 原书第2版 立即下载
      Java多线程编程实战指南:核心篇
      Java多线程编程实战指南:核心篇 超清影印版

      Java多线程编程实战指南以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进介绍Java平台下的多线程编程核心技术及相关工具

      立即下载
      Python编程:从入门到实践
      Python编程:从入门到实践 中文扫描版

      《Python编程:从入门到实践》是Python3.5编程入门图书(从入门到实践),机器学习,数据处理,网络爬虫热门编程语言,从基本概念到完整项目开发,帮助零基础读者迅速掌握Python编程。

      立即下载
      Java WebSocket编程:发、部署和保护动态Web应用
      Java WebSocket编程:发、部署和保护动态Web应用 高清版

      精通Java WebSocket应用开发,充分利用最先进的通信技术构建动态企业级Web应用。《Java WebSocket编程 开发、部署和保护动态Web应用》一书由Java WebSocket编程权威专家撰写,提供了实际的开发策略和

      立即下载
      程序员面试手册:概念、编程问题及面试题
      程序员面试手册:概念、编程问题及面试题 超清完整版

      这书是朝向程序猿招聘面试的教材,书中包揽了各种各样程序编写解决方法,能够 用于合理地解决招聘面试、考题及校招。内容包括了代码、架构模式、数据库系统、数据结构及优化算法等关

      立即下载
      Windows游戏编程
      Windows游戏编程 影印中文版 立即下载
      读者留言
      Dr.李鹤轩

      Dr.李鹤轩 提供上传

      资源
      31
      粉丝
      29
      喜欢
      78
      评论
      19

      Copyright 2018-2020 www.xz577.com 码农之家

      投诉 / 推广 / 赞助:QQ:520161757