我对传感器的理解和js代码正确吗 我读过的关于传感器的网络文章 Js 传感器:JavaScript@Eric Elliott-Medium中的高效数据处理管道 了解JavaScript@Roman Liutikov媒体中的传感器

我对传感器的理解和js代码正确吗 我读过的关于传感器的网络文章 Js 传感器:JavaScript@Eric Elliott-Medium中的高效数据处理管道 了解JavaScript@Roman Liutikov媒体中的传感器,javascript,clojure,functional-programming,Javascript,Clojure,Functional Programming,一半的人很难理解 什么是传感器 更简单的JavaScript转换器 如何使用传感器提高数据转换的效率 Clojure 传感器由Rich Hickey cognitect提供 www.Clojure.org 我阅读了大约2页的Clojure官方教程,理解了基本语法。为了理解传感器示例代码,我参考了内置函数参考 我对以上两篇文章的理解大概是75% 我的问题 我想知道下面的理解/js代码是正确的还是错误的。请帮帮我 关于传感器 compose()返回的值是一个传感器 传感器通过将函数作为参数传

一半的人很难理解

  • 什么是传感器
  • 更简单的JavaScript转换器
  • 如何使用传感器提高数据转换的效率
Clojure
  • 传感器由Rich Hickey cognitect提供
  • www.Clojure.org
我阅读了大约2页的Clojure官方教程,理解了基本语法。为了理解传感器示例代码,我参考了内置函数参考

我对以上两篇文章的理解大概是75%

我的问题 我想知道下面的理解/js代码是正确的还是错误的。请帮帮我

关于传感器
  • compose()
    返回的值是一个传感器
  • 传感器通过将函数作为参数传递给
    transduce()
    执行,此外,(2)传感器通过将数组直接传递给
    Transducer()
    执行
  • 在(2)的过程中,不会生成中间值,而是执行如下链接所示的有效过程

  • 我的代码

    “严格使用”;
    const map=fn=>arr=>arr.map(fn),
    filter=fn=>arr=>arr.filter(fn),
    addReducer=arr=>arr.reduce((acc,num)=>acc+num,0),
    add1=n=>n+1,
    偶数=n=>n%2==0,
    合成=(…fns)=>initVal=>fns.reduce((acc,fn)=>fn(acc,initVal),
    变速器=(变速器,减速器,arr)=>减速器(变速器(arr));
    常数arr=[1,2,3],
    传感器=合成(/*称为传感器或变换器*/
    映射(add1),//2,3,4
    过滤器(偶数),//2,4
    );
    console.log(传感器(arr))//2,4
    console.log(传感器(传感器、加法器、arr))//6
    
    传感器利用函数组合从算术中抽象出来的事实,即可以返回函数而不是“正常值”:

    const comp=f=>g=>x=>f(g(x));
    常量add=x=>y=>x+y;
    常数sqr=x=>x*x;
    const add9=comp(add)(sqr)(3);//返回一个lambda
    console.log(
    
    增补9(6));//15
    您的代码与传感器无关。您对
    filter
    m̀ap
    的定义表明,它使用普通的JS
    过滤器和
    map

    const map = fn => arr => arr.map (fn),
    const filter = fn => arr => arr.filter (fn),
    
    const combo = compose(map(add1), filter(even));
    combo(arr); ==> [2, 4]
    
    发生的情况是,初始数组通过
    add1
    传递到
    map
    ,该数组将生成数组
    [2,3,4]
    ,然后通过
    偶数
    传递到
    过滤器
    ,并创建一个新数组
    [2,4]

    在传感器中也是如此:

    const arr=[1,2,3];
    常量add1=n=>n+1;
    常量偶数=n=>n%2==0;
    常量组合=(…fns)=>{
    常量[firstFunc,…restFuncs]=fns.reverse();
    return(…args)=>restFuncs.reduce((acc,fn)=>fn(acc),firstFunc(…args));
    };
    常量映射=
    fn=>join=>(acc,e)=>join(acc,fn(e));
    常量筛选=
    isIncluded=>join=>(acc,e)=>isIncluded(e)?加入(acc,e):acc;
    常数传感器=合成(映射(add1),滤波(偶数));
    常量数组连接=(acc,e)=>([…acc,e]);
    const result=arr.reduce(传感器(阵列连接),[]);
    
    控制台日志(结果)
    compose
    错误。当您通过
    compose(a,b)
    时,它会变成
    b(a(initVal))
    ,而应该按相反的顺序应用
    a(b(initVal))
    谢谢您的回答。我明白了。compose()是右关联的,pipe()是左辅助的,对吗?是的,您实现了
    pipe
    。相关:谢谢您的回答。我阅读并试图理解你的答案。非常非常感谢。尤其是你的回答中的两句话让我意识到:(1)“传感器利用了函数组合从算术中抽象出来的事实,即可以返回一个函数而不是一个“正常值”。(2)“同样值得注意的是,transduce只是一个方便的函数,理解这个概念并不重要。“谢谢你的回答。哦,我得到了你的前一半答案!现在,试着理解下半部分<代码>加入
    是必不可少的,关键部分…(现在继续理解…)非常非常棒!