【发布时间】:2012-11-29 16:34:19
【问题描述】:
【问题讨论】:
标签: javascript linq stream relationship sicp
【问题讨论】:
标签: javascript linq stream relationship sicp
我没有使用过这两个库,但是,这是我的初步分析(我已经阅读了相当多的 SICP,但不可否认不是全部内容)。
stream.js 是用于列表的函数式数据结构的实现。函数式语言中的许多数据结构往往是递归的,就像Stream 结构一样。它由一个头部元素和一个用于尾部(后续元素)的Stream 组成。在这里,可以通过允许尾部为函数(即无限序列)来实现惰性求值。
现在,回答你的问题,linq.js 提供的所有函数都应该可以用其他常见的高阶函数定义,如 map、reduce、walk、fold 等。
当然,stream.js 没有实现 linq.js 中的 Any() 方法,但您可以使用 reduce() 来实现。
【讨论】:
我猜它们是相似的,因为它们传递函数而不是“标量值”,因此它们可以进行惰性评估(在操作结束时/按需评估结果,而不是像经典的 javascript 数据结构那样在每次操作时评估结果)。我在 pimple.js 库中使用了该原则,它与流或链接无关,但使用惰性评估。
【讨论】:
linq.js 和stream.js 有以下相似之处:
linq.js 和stream.js 有以下区别:
参考文献
【讨论】: