写点什么

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:081865
用户头像

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

关注

评论

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

ES6新特性(五)

阡陌r

JavaScript class ES6

FabFilter Total Bundle 2023 for Mac(音频插件合集)修复版 v2023.06.29完整激活版

mac

苹果mac Windows软件 FabFilter 2023 Total FabFilter 插件

非线性中国式报表引擎NopReport源码解析

canonical

低代码 中国式报表 可逆计算 Nop平台 报表引擎

文心一言 VS 讯飞星火 VS chatgpt (123)-- 算法导论10.4 4题

福大大架构师每日一题

福大大架构师每日一题

KK 架构训练营 - Week1

jjn0703

架构

DeFi(智能合约)流动性质押挖矿系统开发理念丨python合约编程教程

V\TG【ch3nguang】

区块链系统开发软件外包公司

V\TG【ch3nguang】

DAPP合约质押挖矿系统开发(源码搭建)

l8l259l3365

After Effects 2023 for Mac(Ae视频特效制作) v23.6永久激活版

mac

AE2023 苹果mac Windows软件 After Effects 2023 视频特效编辑软件

API商品数据接口调用实战:爬虫与数据获取

Noah

API 文档 API 开发

盘点帮助系统的需求,提升用户的体验

AlexLei

帮助中心 帮助系统 帮助体系

PingCode 第四届开发者大会成功举办

爱吃小舅的鱼

软件开发 开发 PingCode

手机旗舰芯片巨头较量,都有哪些“秘密武器”?

脑极体

AI

Python 模块:创建、导入和使用

小万哥

Python 程序员 软件 后端 开发

Linux rm命令:删除文件或目录

梦笔生花

LP流动性挖矿系统开发详细需求丨LP流动性挖矿dapp开发源码部署

V\TG【ch3nguang】

ES6新特性(四)

阡陌r

JavaScript set map ES6 Proxy

Premiere Pro 2024 for Mac(pr 2024视频编辑软件)v24.0完美激活版

mac

苹果mac Windows软件 视频编辑软件 Premiere Pro 2024 pr2024

Linux cp命令:复制文件和目录

梦笔生花

人工智能之从零理解人工神经网络

珲少

广州软件外包公司开发流程详解

V\TG【ch3nguang】

如何找到靠谱的软件外包开发公司?

V\TG【ch3nguang】

Illustrator 2023 for mac(ai2023矢量图形编辑软件) v27.9完整激活版

mac

ai2023 苹果mac Windows软件 矢量图形编辑软件 Illustrator 2023

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