【问题标题】:What's the relationship between streamjs and linqjsstreamjs和linqjs有什么关系
【发布时间】:2012-11-29 16:34:19
【问题描述】:

读完SICP,最近发现streamjs。开发人员引用linqjs 作为具有不同语法的替代实现,但我无法建立连接。 streamjs 中的方法如何映射到 linqjs 中的方法?

【问题讨论】:

    标签: javascript linq stream relationship sicp


    【解决方案1】:

    我没有使用过这两个库,但是,这是我的初步分析(我已经阅读了相当多的 SICP,但不可否认不是全部内容)。

    stream.js 是用于列表的函数式数据结构的实现。函数式语言中的许多数据结构往往是递归的,就像Stream 结构一样。它由一个头部元素和一个用于尾部(后续元素)的Stream 组成。在这里,可以通过允许尾部为函数(即无限序列)来实现惰性求值。

    现在,回答你的问题,linq.js 提供的所有函数都应该可以用其他常见的高阶函数定义,如 map、reduce、walk、fold 等。

    当然,stream.js 没有实现 linq.js 中的 Any() 方法,但您可以使用 reduce() 来实现。

    【讨论】:

      【解决方案2】:

      我猜它们是相似的,因为它们传递函数而不是“标量值”,因此它们可以进行惰性评估(在操作结束时/按需评估结果,而不是像经典的 javascript 数据结构那样在每次操作时评估结果)。我在 pimple.js 库中使用了该原则,它与流或链接无关,但使用惰性评估。

      【讨论】:

        【解决方案3】:

        linq.js 和stream.js 有以下相似之处:

        • 使用函数将流实现为数据结构
        • 使用流实现操作的惰性求值

        linq.js 和stream.js 有以下区别:

        • linq.js 有用于查询 JSON 的语法糖
        • stream.js 具有链接流的能力
        • linq.js 具有用于集合操作的语法糖

        参考文献

        【讨论】:

          猜你喜欢
          • 2016-09-28
          • 2013-07-02
          • 2017-02-06
          • 2022-01-03
          • 2020-03-05
          • 2012-09-27
          • 2020-04-17
          • 2016-03-21
          • 2015-07-08
          相关资源
          最近更新 更多