zoukankan      html  css  js  c++  java
  • [Transducer] Lazyness in Transduer

    Transducers remove the requirement of being lazy to optimize for things like take(10). However, it can still be useful to "bind" a collection to a set of transformations and pass it around, without actually evaluating the transformations.

    As noted above, whenever you apply transformations to an iterator it does so lazily. It's easy convert array transformations into a lazy operation, just use the utility function iterator to grab an iterator of the array instead.

    The whole point here is using 'iterator' from transducer.js lib. So you get control when you need the data.

    import t from 'transducers.js';
    
    const doubleTheNumber = number => number * 2;
    export const evenOnly = number => number % 2 === 0;
    
    const doubleAndEven = t.compose(
      t.filter(evenOnly),
      t.map(doubleTheNumber),
    );
    
    const arr = [1,2,3,4,5,6,7,8,9,10];
    const res = t.seq(
      t.iterator(arr),
      t.compose(doubleAndEven, t.take(2)),
    );
    
    function* makeNumbers() {
      let num = 1;
      while (true) yield num++;
    }
    
    const lazyNums = t.seq(makeNumbers(), doubleAndEven);
    
    console.log(
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
    );
  • 相关阅读:
    修改linux命令行提示符颜色
    passwd命令
    用户与用户组
    计划任务
    sed简单用法
    sed命令实现对文件内容的添加
    C#颜色选择器的调用操作
    插入排序算法的学习
    二叉树的学习记录
    判断两个单链表是否相交及相交的第一个节点
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8306326.html
Copyright © 2011-2022 走看看