[Javascript] Improve Composition with the Compose Combinator
To make our composition more readable and easier to name we are going to ceate a compose
function we can use to avoid having to manually nest our transducer calls.
We'll also go over semantically naming your compose
functions for extra readability.
Nested style:
import {doubleTheNumber, evenOnly} from "../utils"; const map = xf => reducer => { return (accumulation, value) => { return reducer(accumulation, xf(value)); }; }; const filter = predicate => reducer => { return (accumulation, value) => { if (predicate(value)) return reducer(accumulation, value); return accumulation; }; }; const isEvenFilter = filter(evenOnly); const isNot2Filter = filter(val => val !== 2); const doubleMap = map(doubleTheNumber); const pushReducer = (accumulation, value) => { accumulation.push(value); return accumulation; }; [1,2,3,4].reduce(isNot2Filter(isEvenFilter(doubleMap(pushReducer))), []);
Compose function:
import {filter, map, evenOnly, doubleTheNumber} from "../utils"; const doubleMap = map(doubleTheNumber); const isEvenFilter = filter(evenOnly); const isNot2Filter = filter(val => val !== 2); const pushReducer = (accumulation, value) => { accumulation.push(value); return accumulation; }; [1, 2, 3, 4].reduce(isNot2Filter(isEvenFilter(doubleMap(pushReducer))), []); // compose(f,g)(x) === f(g(x)); // // compose(isNot2Filter, isEvenFilter, doubleMap)(pushReducer) === // isNot2Filter(isEvenFilter(doubleMap(pushReducer))); const compose = (...functions) => functions.reduce((accumulation, fn) => (...args) => accumulation(fn(...args)), x => x); [1, 2, 3, 4].reduce( compose(isNot2Filter, isEvenFilter, doubleMap)(pushReducer), [], ); /*?*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2017-01-16 [Angular Directive] Create a Template Storage Service in Angular 2
2017-01-16 [Angular Directive] Assign a Structual Directive a Dynamic Context in Angular 2
2017-01-16 [Angular Directive] Implement Structural Directive Data Binding with Context in Angular
2015-01-16 [MODx] 10. Using Babel for Muti-languages support