写点什么

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

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

关注

评论

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

荣誉 | 观测云登榜「2023 中国好 SaaS TOP 10 SaaS 企业 」

观测云

可观测性 SaaS

macOS 14 Sonoma 14.1.1正式版(最新苹果系统) pkg完整安装包

Rose

苹果系统 macOS 14 Sonoma Mac14系统

Mac矢量图设计Sketch for Mac v99中文激活版 永久使用

Rose

sketch Mac Mac矢量图设计 Sketch 99新功能 Sketch 中文版下载

ps cc2019 Mac中文直装版v20.0.10 兼容M1

Rose

ps cc2019 Photoshop2019破解版 PS2019 Mac中文版下载

Mac 版截图工具链

Eric 老乌龟

macos 工具

Unity中国全面支持OpenHarmony游戏开发,多款游戏率先完成适配

最新动态

销售易取得500强客户背后的实践与进化

B Impact

海外IP代理rola-ip表现突出,全球覆盖面广,技术支持优秀

Geek_bf375d

剑指数据结构—实现动态数组

少年游侠客

数据结构 数组 ArrayList Java’

Barcode for Mac:快速生成各类条形码

Rose

mac软件下载 条形码设计 Barcode for Mac Barcode 下载

云电脑与5G网络的结合将会带来什么

青椒云云电脑

云电脑

低代码工具的常见用例与受众市场

树上有只程序猿

低代码

海外HTTP代理哪家最好用?Rola-IP与StormProxies的全方位数据对比

Geek_bf375d

投资机构Janus Capital Group为Rola-IP品牌融资700万美元

Geek_bf375d

哪些行业发展需要用到代理IP?罗拉ROLA-IP告诉你什么是专业

Geek_bf375d

ROLA-IP海外IP代理为第四届全球跨境电子商务大会注入活力

Geek_bf375d

8款好用的笔记软件,让你的读书笔记独一无二!

彭宏豪95

读书笔记 效率 软件推荐 在线白板 笔记软件

Python 机器学习入门:数据集、数据类型和统计学

小万哥

Python 程序员 软件 后端 开发

一物一码需求,标签制作功能轻松解决

草料二维码

二维码 二维码生成 标签制作 一物一码

分布式AI在LLM时代的技术深度探索

不在线第一只蜗牛

人工智能 AI lee

瓴羊X阿里云上的Salesforce联合解决方案正式发布

ToB行业头条

“箭在弦上”的边缘计算,更需要冷静和智慧

脑极体

服务器

IP代理哪家好用? 必看经典文

Geek_bf375d

Linux cat命令

芯动大师

【Data & AI Con Shanghai 2023】嘉宾专访|西电王皓:认清边界 大胆创新

白玉兰开源

人工智能 白玉兰开源

亚马逊云科技大语言模型的创新科技

陈老老老板

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