把握行业变革关键节点,12 月 19 日 - 20 日,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:082326
用户头像

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

关注

评论

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

全生命周期服务加持,鸿蒙世界构建按下加速键

叶落便知秋

售后技术支持管理指标实践

网易云信

技术支持 售后服务

大数据培训机构哪些口碑好?

小谷哥

融云全球社交泛娱乐洞察,「音频社交」如何出海破圈

融云 RongCloud

出海社交 通讯

易仓科技×OceanBase:打造跨境行业全生态链的新零售SaaS

OceanBase 数据库

OceanBase CTO杨传辉:单机分布式一体化助力企业降本增效

OceanBase 数据库

Vue响应式系统原理并实现一个双向绑定

yyds2026

Vue

Vue响应式依赖收集原理分析-vue高级必备

yyds2026

Vue

Canvas 拖拉拽建模工具,支持排序导出 Notebook 内容|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 canvas 编程建模

数字化转型中的数字智能

PMO实践

数字化 科技 数智化 数智未来

上海大数据培训机构应该注意什么

小谷哥

西安Java线下机构学习费用

小谷哥

项目管理的精髓

PMO实践

项目管理 PMO 项目经理

在线 Notebook 教学实训,支持分组评审作业|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 编程建模 教学实训

安全!稳定!可信!选OceanBase就对了

OceanBase 数据库

甘特图是什么意思?甘特图制作步骤教程

优秀

甘特图

OceanBase 社区版4.0发版:一个全新的里程碑

OceanBase 数据库

客如云×OceanBase:分布式云升级助力客如云降本增效

OceanBase 数据库

一站式服务:深圳区块链交易所app系统开发解决方案

W13902449729

区块链 区块链交易所

大数据培训班学习方法有哪些

小谷哥

从ZETA无线通信技术特点出发选择合适的物联网协议

ZETA开发者

物联网 通信 通信协议 无线通信 物联网技术

Vue中的diff算法深度解析

yyds2026

Vue

《入侵生命周期细分实践指南系列》:异常凭证攻击

美创科技

零依赖监控解决方案:TDengine+Grafana落地实施

TDengine

数据库 tdengine 时序数据库

开发问题记录

青柚1943

盘点16种常见的PCB可靠性测试,您的板经得起测试吗?

华秋PCB

测试 PCB PCB设计

前端培训有哪些比较好的学习方法

小谷哥

GPU 和显卡是什么关系?

Finovy Cloud

人工智能 gpu 云渲染 GPU渲染

对话ACE第六期:数据库上云的趋势和挑战

OceanBase 数据库

低代码选型应该注重哪些方面的能力?

优秀

低代码

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