问题标签 [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.
scheme - 通过高阶累积过程展平 Scheme 中惰性列表的惰性列表
我试图找到一个实现,它使用我编写的过程来interleave
扁平化惰性列表的惰性列表。lz-lst-accumulate
这是到目前为止的代码:
该过程all-div-from
接收下限low
并返回惰性列表的惰性列表。其中的每个惰性列表都是由div-from
它接收一个下限low
和一个整数int > low
,并返回所有大于low
且可被 整除的整数的惰性列表int
。
输入和正确输出的示例:
但是当我在解释器中尝试这一行时:
它进入一个无限循环。
我的执行必须使用lz-lst-accumulate
,interleave
和all-div-from-flattend
程序。
有关如何使其工作的任何建议?
clojure - Clojure 打印惰性序列
我正在尝试打印出我的二叉树,但 Clojure 让我很难正确打印出序列。
因此,例如,我有一个节点列表'(1 2 3)
。
在每次迭代中,我想在每个元素之前和之后打印出带有多个空格的节点。
太好了,这似乎有效。
所以,假设我有一个nodes
'(:a :b :c)
我想在一行上打印的列表,如上所述,空格。
我有一个项目清单。使用地图我得到一个字符串对象列表。太好了,所以我可以打印它们!
但这给了我这个:
所以我用谷歌搜索了如何打印惰性序列,然后开始使用print-str
命令。根据文档,这会打印到一个字符串,然后返回。
但这给了我这个:
没有变化.. Hrm。任何帮助是极大的赞赏。
r - R中的惰性序列
在 Clojure 中,使用惰性序列构造函数很容易创建无限序列。例如,
返回一个N
等价于无限序列的数据对象
评估该值N
会导致无限循环。评估(take 20 N)
返回前 20 个数字。由于序列是惰性的,因此该inc
函数仅在您要求时迭代。由于 Clojure 是同音异形的,因此惰性序列是递归存储的。
在 R 中,是否可以做类似的事情?您能否提供一些示例 R 代码,该代码生成的数据对象N
等效于完整的无限自然数序列?评估完整对象N
应该导致一个循环,但类似的东西head(N)
应该只返回前导数字。
注意:我真的对惰性序列而不是自然数本身更感兴趣。
编辑:这是 Clojure 源代码lazy-seq
:
我正在寻找在 R 中具有相同功能的宏。
clojure - Clojure 中的振荡函数
我无法从4clojure站点解决此问题,并且错误没有太大帮助:
此版本的函数显示此错误:
为什么recur
期待0
参数,但是我尝试了这个其他功能:
但它产生了这个:
我能想到的唯一地方错误在lazy-seq
函数之后,它在语法上似乎没问题。
这两个函数在这个测试中都失败了
exception - Clojure 惰性序列给了我 ArithmeticException
我正在尝试重新实现我的自定义地图功能,但它以一种奇怪的方式工作。有人可以解释为什么会这样吗?
首先按预期工作,但第二次给我以下错误(看起来它评估所有序列):
recursion - 使用“lazy-seq”会递归地占用堆栈帧吗?
我现在正在学习惰性序列,我注意到它们通常涉及递归而不使用recur
. 例如,这里是 的实现iterate
:
我的印象是,如果你在不使用的情况下递归recur
,它会为每次调用创建一个新的堆栈帧,如果你迭代足够多的时间,这可能会导致堆栈溢出。
lazy-seq
吞噬堆栈帧吗?如果不是,它如何避免这种情况?
clojure - 懒惰序列如何在这段代码中运行
代码在这里:
据我所知,这fib-seq
是一个惰性序列生成器,可以生成一系列斐波那契数。
通过看看(take 5 fib-seq)
我会得到如下斐波那契数:
(0 1 1 2 3)
但是我无法弄清楚惰性序列是如何在需要时生成的,所以我在上面添加了一些副作用。
通过添加println
我希望它打印出来R
,并且B
每当惰性序列在需要时尝试生成新条目时,但不幸的是结果是这样的。
上面的输出看起来已经很奇怪了,因为它没有逐个元素地打印 R 和 B,但让我们看一下下一步。
第一次取元素后:
我再也不会收到R
andB
了,这让我很困惑,因为它与我对惰性序列生成的理解相冲突。
有人可以一步一步地向我解释吗?
顺便说一句,有没有可能有一个debug
实用程序来调试它step by step
,就像Java
和C
?
clojure - Clojure:为什么 sniptest 会产生 LazySeq
我在 enlive 中创建了一个模板,并且在使用这个产生lazyseq 的片段时遇到了问题。当我在 REPL 中尝试这个 sniptest 时,它会产生“clojure.lang.LazySeq@ba6da9f2”。
测试它所需的其余代码如下所示
index.html 文件看起来像这样(也可以在这里找到http://www.filedropper.com/index_25))
我看到了一个类似的问题,但解决方案是使用内容而不是 html-content。不知道是什么导致了这里的问题......
clojure - 惰性分区
我有一个项目来源,并希望单独处理它们的运行,它们具有相同的键函数值。在 Python 中,这看起来像
这个解决方案是完全惰性的,即如果process
不尝试存储整个内容part
,代码将在O(1)
内存中运行。
Clojure 解决方案
不那么懒惰:它完全实现了每个部分。问题是,src
可能有非常长的具有相同key-fn
价值的项目运行并意识到它们可能会导致 OOM。
我发现了这个讨论,它声称以下函数(为了帖子内部的命名一致性而稍作修改)足够懒惰
但是,我不明白为什么它不会受到 OOM 的影响:cons 单元格的两个部分都持有对 的引用s
,因此在process
消费时part
,s
正在实现但没有被垃圾收集。drop-while
它只有在遍历时才有资格进行 GC part
。
所以,我的问题是:
- 我
lazy-partition-by
不够懒惰是正确的吗? - 是否有保证内存要求的实现,前提是在我开始实现下一个时我
partition-by
没有对前一个的任何引用?part
编辑:这是 Haskell 中一个足够懒惰的实现:
从span
实现中可以看出,part
并且rest
隐式共享状态。我想知道这个方法是否可以翻译成 Clojure。
ruby - ArgumentError - 尝试在没有块的情况下调用惰性 take_while
想象一下,有 M 个大文本文件,每个文件有 N 行,索引从 1 到 M*N。我的目标是获取索引 X 之后的所有行,或者如果未提供 X,则仅获取最后 10 行。我可以做一个外部if
来拆分这两个公式,但我想? :
深入内部,例如:
但我得到:
ArgumentError - 尝试在没有块的情况下调用惰性 take_while:`
而根据诸如以下的答案:在数组
链接中对连续数字进行分组.take_while.with_index
应该是可能的。
我做错了什么并且没有看到错误,还是.lazy
真的只是缺少一些功能,我必须等待将来的一些补丁?