速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

Clojure 1.7 引入 Transducers,提高跨平台支持度

  • 2015-08-05
  • 本文字数:861 字

    阅读完需:约 3 分钟

Cognitect 的 Alex Miller:Transducers 和reader conditionals 是Clojure 1.7 最重要的两个特性。 Transducers 的目标是使不同的集合可组合算法转换, 而 reader conditionals 可以用来改善 Clojure 跨 JVM 和 JavaScript 平台的可移植性。

Transducers

Transducers 是一种减量函数转换器(reducing function transformers),获取一种减量函数并返回另一种的函数。减量函数仅仅是一种可以用来 reduce 的函数。Rich Hickey解释说: transducers 的主要优势是它们允许分离三个主要问题:

  • 减量函数是什么;
  • 应用在哪些集合中;
  • reduce 的输入。

在 Clojure 1.7 中,为了支持 Transducers,像 map、cat、filter 等大多数序列函数,在输入集合中都添加了一个新的参数。例如,

(def tr1 (map f))将会返回一个 map transducer。此外,Transducers 可以通过 Comp 函数组合:

(def xform (comp (filter odd?)(map inc)))来提供一个新的 Transducers。一旦你有了一个 Transducers,你可以把它应用在几个方面,例如矢量数据。

(Sequence Xform data)使用 Transducers 函数替代 sequence,你将会获得跟将 reduce 应用在 data 上同样的结果并获得组合函数原型。

上面示例的主要好处是:如果使用简单的组合功能,当它运行时,仅仅建立一个 lazy sequence 而不是三个。

Reader conditionals

Reader conditionals 是 Clojure 1.7 引入的一种新的格式,可以由 Clojure 和 ClojureScript 加载,并可以应用在.cljc 文件语境中。把多个 Clojure 平台使用一种代码库作为目标的方法,使得拥有库和应用程序成为可能,并且 Reader conditionals 提供的机制让处理平台特定代码时更加容易。

类似于 cond 形式,Reader conditionals 表达式允许为每一个平台指定应该使用的平台特定代码。例如下面的表达式:

[1 2 #?@(:clj [3 4] :cljs [5 6])]在 Clojure 上我们将会得到 [1 2 3 4],在 ClojureScript 上是 [1 2 5 6]。

Clojure 1.7 除了 Transducers 和 Reader conditionals,还包含了更多新的特性和增强功能。

查看英文原文 Clojure 1.7 Introduces Transducers, Improves Cross-platform Support

2015-08-05 07:081880
用户头像

发布了 92 篇内容, 共 25.4 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

【LeetCode】点菜展示表Java题解

Albert

算法 LeetCode 7月日更

BVD比特视频APP系统开发搭建

斗宠大陆APP开发|斗宠大陆软件系统开发

【Flutter 专题】95 图解 Dart 单线程实现异步处理之 Task Queue

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

微服务错误码设计实践

循环智能

微服务 gRPC 异常处理 错误码 接口设计

2022前端面试必备题+答案

buchila11

写代码是意识流?

卢卡多多

代码规范 意识 7月日更

包租婆软件开发|包租婆系统APP开发

Google 宣布 Android APK 退位对鸿蒙意味着什么?|【话题讨论】

老猿Python

android 鸿蒙 Google AAB格式

Redisson 分布式锁源码 04:可重入锁释放

程序员小航

Java redis 分布式锁 redisson redisson 分布式锁

学习哪门编程语言好,我来回答

实力程序员

Rust从0到1-Cargo-Workspaces

rust cargo workspaces

电脑误删文件如何恢复?两个方法解决你的困扰

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

敏捷项目管理会不会代替传统项目管理?

万事ONES

项目管理 ONES 敏捷管理

架构实战营 作业 模块一

脉醉

#架构实战营

开发小技巧之:unicode的排序和正则匹配

程序那些事

Unicode 排序 程序那些事

带你用VUE实现上传图片效果

华为云开发者联盟

CSS html Vue js 标签

IPFS公司有哪些?IPFS 哪家公司好?

多链星球APP开发|多链星球系统软件开发

5分钟带你了解微前端(内含大量代码示例)

LigaAI

大前端 qiankun

在线HTTP请求/响应头转JSON工具

入门小站

工具

架构实战营 - 模块1 - 微信架构及学生管理系统毕设架构

雪中亮

架构实战营 #架构实战营

Rust从0到1-Cargo-自定义命令

rust cargo 自定义命令 Custom Commands

骆驼币挖矿软件开发|骆驼币挖矿APP系统开发

阿凡达挖矿软件开发|阿凡达挖矿APP系统开发

BTCs挖矿软件开发|BTCs挖矿系统APP开发

java算法易筋经:常见java-API使用技巧

华为云开发者联盟

Java List 数组 队列 java-API

程序员跳槽指南

孙叫兽

程序员 跳槽 攻略

徒步运动系统开发|徒步运动软件APP开发

关于深度学习编译器,这些知识你需要了解一下

华为云开发者联盟

深度学习 tensorflow 编译器 算子开发 深度学习编译器

Apache Flink 入门知识超全概括!

云祁

大数据 flink 7月日更

Clojure 1.7引入Transducers,提高跨平台支持度_后端_Sergio De Simone_InfoQ精选文章