2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

明晚见:快速上手 IoTDB 树表双模型,功能/场景直播详解!

Apache IoTDB

域名服务器有哪些不同类型?

伤感汤姆布利柏

当我的同事先用了通义灵码DeepSeek-R1模型……

阿里巴巴云原生

阿里云 云原生 通义灵码

Redis与MySQL数据一致性问题解决方案

秃头小帅oi

YashanDB服务端安装

YashanDB

数据库 yashandb

YashanDB实例启停

YashanDB

数据库 yashandb

探索未来金融世界的钥匙——代币开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

当我的同事先用了通义灵码DeepSeek-R1模型……

阿里云云效

阿里云 云原生 通义灵码 AI程序员 AI程序员体验官

文献解读-Integrative Genomic Analysis of Drug Resistance in MET Exon 14 Skipping Lung Cancer Using Patient-Derived Xenograft Models

INSVAST

基因测序 肿瘤测序 Sentieon GATK 生物信息分析服务

远程办公网络访问优化指南

Ogcloud

SD-WAN 企业组网 企业网络 异地组网 远程办公网络

什么是DApp?从智能合约到完整DApp系统开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 代币开发 交易所开发公链开发

公链开发与公链生态开发:构建未来区块链世界的基石

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

性能测试丨JMeter 分布式加压机制

测试人

修改DNS解析记录多久生效?

防火墙后吃泡面

融云数据监控平台「北极星」教程,聊天室洪峰、连接异常、消息未达正确解法

融云 RongCloud

YashanDB客户端安装

YashanDB

数据库 yashandb

低代码平台:数字化时代的开发加速器与业务创新引擎

万界星空科技

低代码 低代码开发 低代码平台 mes 万界星空科技低代码平台

LazyLLM破局多Agent应用开发困境,让你“懒”到底!

商汤万象开发者

AI LLM

AI口语练习APP的测试场景

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI口语APP

什么是网络拓扑及其类型介绍

Ogcloud

网络 网络拓扑 企业组网

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