问题标签 [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 回答
1043 浏览

scheme - 通过高阶累积过程展平 Scheme 中惰性列表的惰性列表

我试图找到一个实现,它使用我编写的过程来interleave扁平化惰性列表的惰性列表。lz-lst-accumulate这是到目前为止的代码:

该过程all-div-from接收下限low并返回惰性列表的惰性列表。其中的每个惰性列表都是由div-from它接收一个下限low和一个整数int > low,并返回所有大于low且可被 整除的整数的惰性列表int

输入和正确输出的示例:

但是当我在解释器中尝试这一行时:

它进入一个无限循环。

我的执行必须使用lz-lst-accumulate,interleaveall-div-from-flattend程序。

有关如何使其工作的任何建议?

0 投票
1 回答
9298 浏览

clojure - Clojure 打印惰性序列

我正在尝试打印出我的二叉树,但 Clojure 让我很难正确打印出序列。

因此,例如,我有一个节点列表'(1 2 3)

在每次迭代中,我想在每个元素之前和之后打印出带有多个空格的节点。

太好了,这似乎有效。

所以,假设我有一个nodes '(:a :b :c)我想在一行上打印的列表,如上所述,空格。

我有一个项目清单。使用地图我得到一个字符串对象列表。太好了,所以我可以打印它们!

但这给了我这个:

所以我用谷歌搜索了如何打印惰性序列,然后开始使用print-str命令。根据文档,这会打印到一个字符串,然后返回。

但这给了我这个:

没有变化.. Hrm。任何帮助是极大的赞赏。

0 投票
4 回答
1223 浏览

r - R中的惰性序列

在 Clojure 中,使用惰性序列构造函数很容易创建无限序列。例如,

返回一个N等价于无限序列的数据对象

评估该值N会导致无限循环。评估(take 20 N)返回前 20 个数字。由于序列是惰性的,因此该inc函数仅在您要求时迭代。由于 Clojure 是同音异形的,因此惰性序列是递归存储的。

在 R 中,是否可以做类似的事情?您能否提供一些示例 R 代码,该代码生成的数据对象N等效于完整的无限自然数序列?评估完整对象N应该导致一个循环,但类似的东西head(N)应该只返回前导数字。

注意:我真的对惰性序列而不是自然数本身更感兴趣。

编辑:这是 Clojure 源代码lazy-seq

我正在寻找在 R 中具有相同功能的宏。

0 投票
2 回答
120 浏览

clojure - Clojure 中的振荡函数

我无法从4clojure站点解决此问题,并且错误没有太大帮助:

此版本的函数显示此错误:

为什么recur期待0参数,但是我尝试了这个其他功能:

但它产生了这个:

我能想到的唯一地方错误在lazy-seq函数之后,它在语法上似乎没问题。

这两个函数在这个测试中都失败了

0 投票
1 回答
70 浏览

exception - Clojure 惰性序列给了我 ArithmeticException

我正在尝试重新实现我的自定义地图功能,但它以一种奇怪的方式工作。有人可以解释为什么会这样吗?

首先按预期工作,但第二次给我以下错误(看起来它评估所有序列):

0 投票
2 回答
75 浏览

recursion - 使用“lazy-seq”会递归地占用堆栈帧吗?

我现在正在学习惰性序列,我注意到它们通常涉及递归而不使用recur. 例如,这里是 的实现iterate

我的印象是,如果你在不使用的情况下递归recur,它会为每次调用创建一个新的堆栈帧,如果你迭代足够多的时间,这可能会导致堆栈溢出。

lazy-seq吞噬堆栈帧吗?如果不是,它如何避免这种情况?

0 投票
2 回答
142 浏览

clojure - 懒惰序列如何在这段代码中运行

代码在这里:

据我所知,这fib-seq是一个惰性序列生成器,可以生成一系列斐波那契数。
通过看看(take 5 fib-seq)我会得到如下斐波那契数:
(0 1 1 2 3)

但是我无法弄清楚惰性序列是如何在需要时生成的,所以我在上面添加了一些副作用。

通过添加println我希望它打印出来R,并且B每当惰性序列在需要时尝试生成新条目时,但不幸的是结果是这样的。

上面的输出看起来已经很奇怪了,因为它没有逐个元素地打印 R 和 B,但让我们看一下下一步。

第一次取元素后:

我再也不会收到RandB了,这让我很困惑,因为它与我对惰性序列生成的理解相冲突。

有人可以一步一步地向我解释吗?
顺便说一句,有没有可能有一个debug实用程序来调试它step by step,就像JavaC

0 投票
1 回答
84 浏览

clojure - Clojure:为什么 sniptest 会产生 LazySeq

我在 enlive 中创建了一个模板,并且在使用这个产生lazyseq 的片段时遇到了问题。当我在 REPL 中尝试这个 sniptest 时,它会产生“clojure.lang.LazySeq@ba6da9f2”。

测试它所需的其余代码如下所示

index.html 文件看起来像这样(也可以在这里找到http://www.filedropper.com/index_25))

我看到了一个类似的问题,但解决方案是使用内容而不是 html-content。不知道是什么导致了这里的问题......

0 投票
3 回答
780 浏览

clojure - 惰性分区

我有一个项目来源,并希望单独处理它们的运行,它们具有相同的键函数值。在 Python 中,这看起来像

这个解决方案是完全惰性的,即如果process不尝试存储整个内容part,代码将在O(1)内存中运行。

Clojure 解决方案

不那么懒惰:它完全实现了每个部分。问题是,src可能有非常长的具有相同key-fn价值的项目运行并意识到它们可能会导致 OOM。

我发现了这个讨论,它声称以下函数(为了帖子内部的命名一致性而稍作修改)足够懒惰

但是,我不明白为什么它不会受到 OOM 的影响:cons 单元格的两个部分都持有对 的引用s,因此在process消费时parts正在实现但没有被垃圾收集。drop-while它只有在遍历时才有资格进行 GC part

所以,我的问题是:

  1. lazy-partition-by不够懒惰是正确的吗?
  2. 是否有保证内存要求的实现,前提是在我开始实现下一个时我partition-by没有对前一个的任何引用?part

编辑:这是 Haskell 中一个足够懒惰的实现:

span实现中可以看出,part并且rest隐式共享状态。我想知道这个方法是否可以翻译成 Clojure。

0 投票
1 回答
164 浏览

ruby - ArgumentError - 尝试在没有块的情况下调用惰性 take_while

想象一下,有 M 个大文本文件,每个文件有 N 行,索引从 1 到 M*N。我的目标是获取索引 X 之后的所有行,或者如果未提供 X,则仅获取最后 10 行。我可以做一个外部if来拆分这两个公式,但我想? :深入内部,例如:

但我得到:

ArgumentError - 尝试在没有块的情况下调用惰性 take_while:`

而根据诸如以下的答案:在数组 链接中对连续数字进行分组.take_while.with_index应该是可能的。

我做错了什么并且没有看到错误,还是.lazy真的只是缺少一些功能,我必须等待将来的一些补丁?