问题标签 [lazy-sequences]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
353 浏览

lisp - 将元数据添加到惰性序列

当我尝试将元数据添加到 Clojure 中的无限惰性序列时,我得到了堆栈溢出,如果我删除元数据,那么它就可以正常工作。为什么添加with-meta宏会破坏惰性序列?

首先创建一个非常好的数字的无限序列:

然后,为每个惰性序列实例添加一些元数据:

尝试将元数据上移一级:

以下是有限序列上的元数据示例:

0 投票
2 回答
1719 浏览

unit-testing - 如何对懒惰进行单元测试

我有一个函数应该采用惰性序列并返回一个未实现的惰性序列。现在我想编写一个单元测试(在 test-is btw 中)以确保结果是一个未实现的惰性序列

0 投票
1 回答
1006 浏览

clojure - Clojure:懒惰的魔法

几乎 2 个相同的程序来生成无限的惰性随机序列。第一个不会崩溃。出现 OutOfMemoryError 异常的第二次崩溃。为什么?

但是以下崩溃很快:

0 投票
3 回答
824 浏览

linq - Enumerable.ToDictionary 是否只检索它需要的内容?

我正在使用 Enumerable.ToDictionary 从 linq 调用中创建字典:

该调用会获取每个术语的全部内容,还是只会从我的数据提供者那里检索 TermID 和 Name 字段?换句话说,如果我这样写,我是否会节省自己的数据库流量:

0 投票
4 回答
1011 浏览

clojure - Clojure 中的迭代器块?

clojure.contrib.sql用来从 SQLite 数据库中获取一些记录。

现在,我真的不想在从函数返回之前实现整个序列(即我想让它保持惰性),但是如果我res直接返回或包装某种惰性包装器(例如我想map结果序列的转换),SQL相关的绑定将在我返回后被重置并关闭连接,因此实现序列将抛出异常。

如何将整个函数封装在一个闭包中并返回一种迭代器块(如yield在 C# 或 Python 中)?

还是有另一种方法可以从此函数返回惰性序列?

0 投票
2 回答
2264 浏览

recursion - 递归函数导致堆栈溢出

我正在尝试编写一个简单的筛子函数来计算 clojure 中的素数。我见过这个关于编写有效筛子函数的问题,但我还没有到那个地步。现在我只是想写一个非常简单(而且很慢)的筛子。这是我想出的:

对于小范围,它可以正常工作,但会导致大范围的堆栈溢出:

我认为通过使用recur这将是一个不消耗堆栈的循环结构?我错过了什么?

0 投票
3 回答
636 浏览

clojure - 欧拉计划第 14 题“向前看”的惰性序列

我正在尝试以一种懒惰的方式解决Project Euler 问题 14。不幸的是,我可能正在尝试做不可能的事情:创建一个惰性序列,它既是惰性的,又以某种方式“向前看”它尚未计算的值。

我为测试正确性而编写的非懒惰版本是:

哪个有效,但确实很慢。当然,我可以记住:

然而,我真正想做的是为了理解惰性序列的局限性而抓狂,然后编写一个这样的函数:

从中拉取元素将导致 n>2 的堆栈溢出,如果您考虑一下为什么它需要在 n=3 时“展望未来”以了解惰性列表中第十个元素的值,这是可以理解的,因为 (+ 1 (* 3 n)) = 10。

由于惰性列表的开销比记忆小得多,我想知道这种事情是否可以通过更延迟的评估或排队以某种方式实现?

0 投票
1 回答
2199 浏览

clojure - 作为向量的 Clojure 惰性序列

我注意到 Clojure 中的惰性序列似乎在内部表示为链表(或者至少它们被视为只能顺序访问元素的序列)。即使在缓存到内存之后,惰性序列上的访问时间nth也是 O(n),而不是像向量那样的恒定时间。

如何在 Clojure 中获得恒定时间查找或增量创建惰性向量?

想象一下,在惰性向量的生成过程中,每个元素都是它之前所有元素的函数,因此遍历列表所花费的时间成为一个重要因素。

相关问题只出现了这个不完整的 Java 片段: Designing alazy vector: question with const

0 投票
2 回答
129 浏览

linq - .NET 4.0 中是否有序列运算符实现?

我的意思是类似于 Linq join、group、distinct 等,只处理值序列,而不是集合。

序列和集合之间的区别在于,序列的长度可能是无限的,而集合是有限的。

让我给你举个例子:

这不起作用。except 的实现在任何一个集合中的数字将严格升序或降序的基础上都不起作用,因此它首先尝试将第二个集合中的所有值收集到一个集合(或类似的集合)中,然后才会这样做开始枚举第一个集合。

假设上面的函数只是一个不会终止的 While 循环,除非您明确停止枚举它,那么上面的代码将因内存不足异常而失败。

但是,鉴于我的集合被认为是严格升序或降序的,.NET 4.0 中是否已经有任何实现可以做到:

  1. 给我所有共同的价值观(内部连接)
  2. 给我两者的所有值(联合/外部连接)
  3. 给我序列#1中所有不在序列#2中的值

我需要这种与我需要构建的调度系统相关的功能,我需要在其中执行以下操作:

从 2010 年到 2012 年,这基本上会给我每个月的第 1 天和第 15 天,但前提是这些日期是在工作日。

有了这样的函数,生成有问题的值会容易得多,而无需明确地从它们中构建集合。在上面的示例中,构建前两个集合需要知道第三个集合的约束,并且示例可能变得比上面的复杂得多。

0 投票
3 回答
3878 浏览

clojure - Clojure 中如何实现惰性序列?

我喜欢 Clojure。该语言困扰我的一件事是我不知道惰性序列是如何实现的,或者它们是如何工作的。

我知道惰性序列只评估序列中被要求的项目。它是如何做到的?

  • 是什么让惰性序列如此高效以至于它们不会消耗太多堆栈?
  • 为什么你可以将递归调用包装在一个惰性序列中,而不再让堆栈溢出来进行大型计算?
  • 惰性序列会消耗哪些资源来完成它的工作?
  • 在什么情况下惰性序列效率低下?
  • 在什么情况下惰性序列最有效?