streamjs和linqjs之间的关系是什么

时间:2012-11-29 16:34:20

标签: javascript linq stream relationship sicp

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我没有使用任何一个库,但是,这是我的初步分析(我已经阅读了相当多的SICP,但事实并非如此)。

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

现在,为了回答你的问题,linq.js提供的所有功能都应该能够与其他常见的高阶函数一起定义,例如map,reduce,walk,fold等。

当然,stream.js未实现Any()中的linq.js方法,但您可以使用reduce()执行此操作。

答案 2 :(得分:0)

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

  • 使用函数将流实现为数据结构
  • 使用流来实施延迟的操作评估

linq.js和stream.js有以下不同之处:

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

<强>参考