读完 SICP,我最近发现了streamjs。开发人员将linqjs引用为具有不同语法的替代实现,但我无法建立联系。streamjs 中的方法如何映射到 linqjs 中的方法?
问问题
330 次
3 回答
1
我猜它们是相似的,因为它们传递函数而不是“标量值”,因此它们可以进行惰性评估(在操作结束时/按需评估结果,而不是像经典的 javascript 数据结构那样在每次操作时评估结果)。我在我的pimple.js库中使用了这个原则,它与流或链接无关,但使用惰性评估。
于 2012-11-29T16:50:23.797 回答
1
我没有使用任何一个库,但是,这是我的初步分析(我已经阅读了很多 SICP,但不可否认,不是全部内容)。
stream.js
是列表的功能样式数据结构的实现。函数式语言中的许多数据结构往往是递归的,就像Stream
结构一样。它由一个头部元素和一个Stream
用于尾部(后续元素)的元素组成。在这里,可以通过允许尾部为函数(即无限序列)来实现惰性求值。
现在,为了回答您的问题,linq.js
应该能够使用其他常见的高阶函数(如 map、reduce、walk、fold 等)来定义by 提供的所有函数。
当然,stream.js
不实现Any()
from 的方法linq.js
,但您可以使用reduce()
.
于 2012-11-29T17:23:16.273 回答
0
linq.js 和 stream.js 有以下相似之处:
- 使用函数将流实现为数据结构
- 使用流实现操作的惰性求值
linq.js 和 stream.js 有以下区别:
- linq.js 有用于查询 JSON 的语法糖
- stream.js 具有链接流的能力
- linq.js 具有用于集合操作的语法糖
参考
于 2014-10-25T01:06:18.390 回答