Clojure经典实例

Clojure经典实例 pdf epub mobi txt 电子书 下载 2025

[美] 范德哈特(Luke VanderHart),[加] 诺伊费尔德(Ryan Neufeld) 著,王海鹏,徐宏宁 译
图书标签:
  • Clojure
  • 函数式编程
  • 编程语言
  • 实例
  • 代码
  • 开发
  • 数据结构
  • 并发
  • JVM
  • 实用指南
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115395948
版次:1
商品编码:11747696
包装:平装
丛书名: 图灵程序设计丛书
开本:16开
出版时间:2015-08-01
用纸:胶版纸
页数:399
正文语种:中文

具体描述

内容简介

本书以具体实例的形式讲解了Clojure语言在不同领域的应用,不仅介绍如何运用Clojure,而且还展示了很多常见库。书中给出了添加了注释的示例代码,详细分析并解释了数百个真实世界的编程任务。读者既可通过本书深入了解Clojure的精髓,也可将本书用作参考指南,解决具体问题。

作者简介

Luke VanderHart是一名Clojure和ClojureScript开发者,目前就职于Cognitect公司(Clojure之父在该公司任CTO)。他是Practical Clojure(Apress)和ClojureScript: Up and Running(O'Reilly)的合著者之一,目前在北卡罗来纳州达勒姆市生活和工作。

Ryan Neufeld通晓多种计算机语言,是一名全能型软件开发者,热衷于分布式系统和网络应用开发。Ryan十分善于为客户解决各种或棘手或简单的软件技术问题,及时为客户交付成果。他目前居住于北卡罗来纳州达勒姆市,是Cognitect公司的一名开发人员。

内页插图

目录

译者序 xi
前言 xiii
第1 章 原生数据 1
1.0 简介 1
1.1 改变字符串的大小写 2
1.2 清除字符串中的空白字符 3
1.3 利用部件构建字符串 5
1.4 将字符串作为字符序列 6
1.5 字符与整数的转换 7
1.6 格式化字符串 9
1.7 按模式查找字符串 11
1.8 利用正则表达式从字符串中取出值 12
1.9 对字符串执行查找和替换 13
1.10 将字符串切分成部分 15
1.11 基于数量为字符串加复数 16
1.12 在字符串、符号和关键字之间的转换 18
1.13 利用非常大或非常小的数来保持精度 20
1.14 使用有理数 21
1.15 解析数字 23
1.16 数的截断和舍入 24
1.17 模糊比较 26
1.18 三角计算 27
1.19 根据不同的进制输入和输出整数 29
1.20 计算数值集合的统计值 30
1.21 位操作 33
1.22 生成随机数 34
1.23 操作货币 36
1.24 生成唯一ID 37
1.25 得到当前的日期和时间 39
1.26 用字面值来表示日期 40
1.27 利用clj-time 解析日期和时间 42
1.28 利用clj-time 格式化日期 43
1.29 比较日期 45
1.30 计算时间间隔的长度 46
1.31 生成一系列的日期和时间 48
1.32 利用原生Java 类型生成一系列日期和时间 49
1.33 根据日期间的关系取得日期 52
1.34 处理时区 53
1.35 将Unix 时间戳转换成Date 对象 55
1.36 将Date 对象转换成Unix 时间戳 56
第2 章 复合数据 58
2.0 简介 58
2.1 创建列表 59
2.2 从已有的数据结构创建列表 61
2.3 在列表中“添加”一个元素 62
2.4 从列表中“移除”一个元素 63
2.5 测试是否列表 64
2.6 创建向量 65
2.7 在向量中“添加”一个元素 66
2.8 从向量中“移除”一个元素 67
2.9 取得索引处的值 68
2.10 设置索引处的值 70
2.11 创建集 71
2.12 在集中添加和移除元素 73
2.13 测试集成员 74
2.14 使用集操作 76
2.15 创建映射表 77
2.16 从映射表中取得值 79
2.17 从映射表中同时取出多个键 82
2.18 设置映射表中的键 84
2.19 用复合值作为映射表的键 86
2.20 将映射表作为序列(或反过来) 88
2.21 对映射表应用函数 90
2.22 一个键保存多个值 92
2.23 合并映射表 95
2.24 值的比较与排序 97
2.25 从集合中移除重复元素 100
2.26 检测集合是否包含几个值中的一个 102
2.27 实现定制的数据结构:红黑树(第一部分) 103
2.28 实现定制的数据结构:红黑树(第二部分) 106
第3 章 广义计算 111
3.0 简介 111
3.1 运行最小的Clojure REPL 111
3.2 交互式文档 112
3.3 探索命名空间 114
3.4 尝试库而不指明依赖关系 116
3.5 运行Clojure 程序 117
3.6 从命令行运行程序 119
3.7 解析命令行参数 121
3.8 创建定制的项目模板 124
3.9 构建具有多态行为的函数 128
3.10 扩展内建的类型 133
3.11 用core.async 解除消费者和生产者的耦合 135
3.12 用core.match 为Clojure 表达式制作解析器 138
3.13 用core.logic 查询层级图 141
3.14 演奏儿歌 146
第4 章 本地I/O 150
4.0 简介 150
4.1 写入STDOUT 和STDERR 150
4.2 从控制台读入一次击键 152
4.3 执行系统命令 153
4.4 访问资源文件 156
4.5 复制文件 157
4.6 删除文件或目录 159
4.7 列出目录中的文件 161
4.8 文件的内存映射 163
4.9 读写文本文件 164
4.10 使用临时文件 165
4.11 在任意位置读写文件 166
4.12 并行文件处理 168
4.13 带归约的并行文件处理 170
4.14 读写Clojure 数据 172
4.15 在配置文件中使用edn 174
4.16 将记录作为edn 值发布 178
4.17 读取Clojure 数据时处理未知的带标签字面值 180
4.18 从文件中读取属性 182
4.19 读写二进制文件 184
4.20 读写CSV 数据 186
4.21 读写压缩文件 187
4.22 处理XML 数据 189
4.23 读写JSON 数据 190
4.24 生成PDF 文件 192
4.25 生成带可滚动文本的GUI 窗口 196
第5 章 网络I/O 和Web 服务 200
5.0 简介 200
5.1 发出HTTP 请求 200
5.2 执行异步HTTP 请求 202
5.3 发出Ping 请求 204
5.4 取得并解析RSS 数据 205
5.5 发送邮件 206
5.6 用RabbitMQ 实现队列通信 210
5.7 通过MQTT 与嵌入式设备通信 215
5.8 并发使用ZeroMQ 219
5.9 创建TCP 客户端 222
5.10 创建TCP 服务器 223
5.11 收发UDP 包 227
第6 章 数据库 230
6.0 简介 230
6.1 连接SQL 数据库 231
6.2 利用连接池连接SQL 数据库 233
6.3 操作SQL 数据库 236
6.4 用Korma 简化SQL 242
6.5 用Lucene 进行全文查找 245
6.6 用ElasticSearch 建立数据索引 248
6.7 使用Cassandra 252
6.8 使用MongoDB 256
6.9 使用Redis 259
6.10 连接Datomic 数据库 262
6.11 为Datomic 数据库定义数据模式 264
6.12 向Datomic 写入数据 267
6.13 从Datomic 数据库中删除数据 270
6.14 尝试Datomic 事务而不提交 272
6.15 遍历Datomic 索引 274
第7 章 Web 应用 277
7.0 简介 277
7.1 Ring 简介 277
7.2 使用Ring 中间件 279
7.3 用Ring 提供静态文件 281
7.4 用Ring 处理表单数据 282
7.5 用Ring 处理Cookie 284
7.6 用Ring 保存会话 286
7.7 在Ring 中读写请求和响应的头 288
7.8 用Compojure 路由请求 289
7.9 用Ring 执行HTTP 重定向 291
7.10 用Liberator 构建REST 风格的应用 292
7.11 用Enlive 实现HTML 模板 294
7.12 用Selmer 实现模板 300
7.13 用Hiccup 实现模板 305
7.14 渲染Markdown 文档 307
7.15 用Luminus 来构建应用 310
第8 章 性能与开发效率 312
8.0 简介 312
8.1 AOT 编译 312
8.2 将项目打包成JAR 文件 314
8.3 创建WAR 文件 317
8.4 将应用作为守护进程运行 320
8.5 利用类型暗示减轻性能问题 325
8.6 用原生Java 数组进行快速数学运算 328
8.7 用Timbre 进行简单剖析 330
8.8 用Timbre 记日志 332
8.9 向Clojars 发布库 334
8.10 使用宏来简化API 弃用 336
第9 章 分布式计算 341
9.0 简介 341
9.1 用Storm 构建活动推送系统 342
9.2 用抽取转换加载(ETL)管道来处理数据 350
9.3 聚合大型文件 354
9.4 测试Cascalog 工作流 359
9.5 设置Cascalog 任务的检查点 361
9.6 解释Cascalog 查询 363
9.7 在Elastic MapReduce 上运行Cascalog任

前言/序言


《Clojure编程之道:函数式开发实战》 内容简介 本书并非 Clojure 语言的入门指南,也非某一本特定书籍的“影子”。它是一本专注于 Clojure 在实际项目开发中应用的书籍,旨在帮助读者深入理解 Clojure 的核心概念,并掌握其在解决复杂软件工程问题时的强大能力。我们不打算在此重复任何你可能已经阅读过的 Clojure 基础知识,而是将精力集中在那些能够真正提升你开发效率、代码质量和系统健壮性的实践方法上。 面向读者 本书适合已经具备一定 Clojure 基础,或者对函数式编程理念有一定了解,并希望将 Clojure 应用于实际项目开发的开发者。无论你是从其他语言转投 Clojure 怀抱,还是希望深化自己在 Clojure 领域的实践经验,本书都将为你提供宝贵的指导。我们假设你已经掌握了 Clojure 的基本语法,例如列表、向量、映射、集合、函数定义、宏等,并对其不可变数据结构和函数式思维模式有所体会。 本书特色 1. 深度实践驱动: 我们不会仅仅讲解理论,而是通过大量的实际代码示例和项目片段,展示如何在真实场景下运用 Clojure 的特性。这些示例并非凭空捏造,而是提炼自实际开发经验,力求贴近真实项目的挑战。 2. 关注关键领域: 本书将深入探讨 Clojure 在几个核心领域的应用,包括: 并发与并行: Clojure 对并发的支持是其核心优势之一。我们将详细讲解 Clojure 的并发原语,如 `atom`、`ref`、`agent`,以及如何使用 `core.async` 构建高效的异步并发系统。重点在于理解这些机制背后的哲学,并学会如何规避并发编程中的常见陷阱。 数据驱动设计: Clojure 的不可变数据结构天然支持数据驱动的设计理念。本书将演示如何利用 Clojure 的数据转换能力,构建清晰、可维护的数据处理管道,以及如何利用 Clojure 的数据结构轻松实现复杂的状态管理。 宏与元编程: Clojure 的宏功能是其强大表现力的重要来源。我们将深入探讨宏的工作原理,并展示如何编写有用的宏来简化代码、提高抽象级别,甚至创造领域特定语言(DSL)。 测试与调试: 实践证明,良好的测试和有效的调试是保证软件质量的关键。本书将介绍 Clojure 中常用的测试框架和工具,并分享一些在调试复杂 Clojure 代码时的实用技巧。 工具与生态系统: 除了语言本身,Clojure 强大的工具和丰富的生态系统也是其吸引力所在。我们将介绍 Leiningen、Boot 等构建工具,以及一些有助于提升开发体验的常用库。 3. 强调“为什么”: 在讲解 Clojure 的特性和技术时,我们不仅仅告诉你“怎么做”,更重要的是解释“为什么这样做”。理解背后的设计理念和权衡,能够帮助你更好地掌握 Clojure,并将其应用于更广泛的问题。 4. 超越基础: 我们不会花费大量篇幅去重复你可能在其他地方已经学过的 Clojure 基础知识,而是直接切入更高级、更具挑战性的主题。例如,在讨论并发时,我们将直接从 `atom` 和 `ref` 的应用场景出发,而不是从头解释什么是“可变状态”和“同步”。 本书结构(非严格章节顺序,仅为内容方向展示) 深入理解 Clojure 的核心数据结构与转换: 不可变性的力量:为何 Clojure 的数据结构如此重要? 利用 `map`、`filter`、`reduce` 等函数进行高效的数据转换。 链式操作与管道:构建清晰的数据流。 嵌套数据结构的优雅处理。 构建健壮的并发与并行系统: `atom` 的实践:无锁状态管理。 `ref` 与 `dosync`:事务性内存的强大能力。 `agent` 的应用:异步消息传递。 `core.async` 深度解析:CSP 模型与协程。 并发模式的比较与选择。 避免共享的可变状态:函数式并发的安全性。 宏:Clojure 的超能力: 理解宏的工作原理:代码生成与转换。 编写实用的宏:简化重复代码,提升抽象。 构建领域特定语言(DSL)。 宏的调试与注意事项。 常见宏模式的解析。 测试与调试 Clojure 代码: Clojure 的测试哲学。 `clojure.test` 框架的使用。 属性测试 (Property-based testing)。 调试 Clojure 代码的技巧与工具。 利用 REPL 进行交互式开发与调试。 Clojure 的生态系统与工程实践: Leiningen 与 Boot:项目管理与构建。 常用库的介绍与实践:`clojure.string`、`clojure.core.logic`、`schema` 等。 与 Java 的互操作性。 部署与发布 Clojure 应用。 模式与架构: 函数式设计模式在 Clojure 中的体现。 如何设计可伸缩、可维护的 Clojure 系统。 状态管理模式在 Clojure 中的实现。 我们不做什么 不提供基础语法教程: 我们不会花费篇幅去解释 `def`, `fn`, `let` 等基本语法,假设读者已经熟悉。 不包含“Hello, World!”: 本书的目标是解决实际问题,而非展示语言的基本功能。 不重复已有的书籍内容: 本书旨在提供独特的视角和深入的实践指导,而非对现有材料的简单复述。 不提供“最佳实践”的清单: 我们相信理解背后的原理比死记硬背“最佳实践”更重要。 开启你的 Clojure 深度之旅 《Clojure编程之道:函数式开发实战》将带领你深入 Clojure 的精髓,让你能够自信地运用这门强大的语言去解决现实世界中的复杂问题。我们鼓励读者积极动手实践,将书中的概念和技巧融会贯通,最终成为一名出色的 Clojure 开发者。准备好迎接一次不拘泥于表面、直击核心的 Clojure 学习体验吧!

用户评价

评分

这本书,我拿到的时候,真的是满怀期待,因为我一直对函数式编程那块儿有点模糊的认识,总觉得它能带来一些不一样的思维方式,摆脱那种线性的、一步步的指令式编程的束缚。Clojure这个名字,我之前也听到过,据说是一种Lisp方言,但又很现代,能在JVM上跑,这听起来就很有吸引力。拿到书后,我迫不及待地翻开了目录,虽然我还没有深入到每一章的具体内容,但光看标题,我就能感受到这本书的编排是循序渐进的,从基础的语法、数据结构,到更复杂的并发处理、宏等等,似乎都囊括其中。我尤其对那些“经典实例”几个字感到好奇,到底会有哪些实际应用的案例呢?我希望书中能有一些真实的项目场景,让我们这些初学者能看到函数式编程是如何解决实际问题的,而不是停留在理论层面。我期待的是,通过这些实例,我能真正理解Clojure的强大之处,比如它的不可变性带来的好处,以及它在处理复杂数据转换时的优雅。如果书中的例子能够覆盖到一些常见的数据分析、Web开发甚至系统工具的构建,那就太棒了。我希望这本书能成为我学习Clojure的坚实起点,让我在函数式编程的世界里不再迷茫。

评分

坦白说,我选择这本书,更多的是被它“经典实例”这个副标题所吸引,而不是对Clojure这个语言本身有多么深刻的理解。我的编程背景比较杂,接触过几种不同的语言,但总感觉在某些场景下,解决问题的思路总有些局限。函数式编程的概念听起来很“玄”,但又据说能带来代码的可读性和可维护性的飞跃,而且在处理并发问题上尤其有优势。Clojure,作为一个运行在JVM上的Lisp方言,结合了Lisp的简洁和JVM的生态,这让我觉得它可能是一个非常实用的工具。拿到书,我最先关注的就是它提供的那些“实例”。我希望这些实例不仅仅是简单的代码片段,而是能够展示Clojure在实际开发中的应用,比如如何用它来构建一个高效的API,或者如何处理海量数据进行分析,甚至是如何编写一些系统级的工具。我期待能够通过这些真实的案例,来理解Clojure的各种特性,比如它的宏系统,它的并发模型,以及它如何利用不可变数据结构来简化复杂的状态管理。如果书中的实例能够具有一定的代表性,能够让我学到一些可以立刻用在实际项目中的技巧,那这本书的价值就真的体现出来了。

评分

我最近正在考虑拓宽我的技术栈,而函数式编程是我一直都很想深入了解的一个方向。Clojure这个名字,我经常在一些技术社区里听到,大家都说它是一种非常独特且强大的函数式编程语言,而且运行在JVM上,这意味着我可以利用已有的Java生态系统,这对我来说是一个很大的吸引力。这本书的标题——《Clojure经典实例》,听起来就非常实在,它承诺的不是空泛的理论,而是具体的、经过实践检验的例子。我希望能通过这本书,看到Clojure是如何解决一些实际编程中的痛点,比如如何优雅地处理并发,如何编写易于测试的代码,以及如何利用其强大的宏功能来减少重复代码。我特别好奇书中会不会有一些关于数据处理、Web服务或者系统工具开发的案例,因为这些都是我日常工作中经常会遇到的场景。如果能够通过这些“经典实例”来理解Clojure的核心概念,比如它的不可变数据结构、它的函数组合能力,以及它在多核处理器上的优势,那我将受益匪浅。我希望这本书能够让我对Clojure有一个扎实的理解,并且能够激发我利用它来解决实际问题的信心。

评分

当我拿到这本书的时候,我立刻就被它的封面设计所吸引,感觉很简洁有力,和Clojure这门语言给我的印象有些契合。我一直对函数式编程的概念感到好奇,觉得它是一种与命令式编程截然不同的思维方式,能够带来代码的简洁性和可维护性。Clojure,作为一种运行在JVM上的Lisp方言,更是让我觉得它融合了Lisp的强大表达能力和Java生态的成熟稳定,这种结合让我觉得非常有潜力。我最期待的就是书中提到的“经典实例”部分。我希望这些实例能够覆盖一些我在日常开发中会遇到的实际问题,例如如何用Clojure来处理复杂的数据转换,如何构建高并发的系统,或者如何编写一些工具来自动化开发流程。我期待通过这些具体的例子,能够深入理解Clojure的原子性、事务内存等并发机制,以及它如何利用不可变数据结构来简化状态的管理。如果书中能够有一些关于函数组合、高阶函数应用的演示,那更是能帮助我更好地掌握函数式编程的核心思想。我希望这本书能够给我带来一次触及本质的学习体验,让我真正理解Clojure的魅力所在。

评分

在探索新的编程范式时,Clojure一直是我非常感兴趣的一个选项。它结合了Lisp的简洁与强大,同时又能运行在JVM上,这意味着我可以无缝接入庞大的Java库,并且享受到JVM的成熟生态。这本书,《Clojure经典实例》,光看名字就让我觉得它非常务实,我期待的是通过实际的代码案例来理解Clojure的精髓,而不是枯燥的理论讲解。我希望能看到书中是如何运用Clojure的函数式特性来解决实际编程难题的,比如如何构建响应式系统,如何进行高效的数据处理,或者如何利用其宏系统来提升开发效率。我尤其好奇书中会提供哪些“经典”的例子,是否能够涵盖从基础的数据操作到更复杂的系统设计。我希望这些例子不仅能够展示Clojure的语法和特性,更能传达一种函数式思维模式,让我理解为什么函数式编程能够带来更清晰、更易于维护的代码。如果书中能够引导我理解Clojure的不可变性、惰性求值以及并发原语,那将是非常宝贵的学习体验。我希望这本书能成为我踏入Clojure世界的坚实阶梯。

评分

第一次在京东买书,结果两本书拿回来都是折邹的。。后面自己压平,一本封面都有折痕了

评分

看上去不错

评分

不错…………

评分

看上去不错

评分

还可以。。。。。。。。。

评分

应该还行,还没看。。。。

评分

不错…………

评分

内容很实在

评分

第一次在京东买书,结果两本书拿回来都是折邹的。。后面自己压平,一本封面都有折痕了

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有