问题标签 [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 投票
2 回答
466 浏览

haskell - mapM 的懒惰版本

假设,我在使用 IO 时得到了大量的项目列表:

现在,我正在尝试fn :: a -> IO b申请as

mapM有 type mapM :: Monad m => (a -> m b) -> [a] -> m [b],这就是我在类型匹配方面所需要的。但它会在内存中构建所有链,直到返回结果。我正在寻找类似的mapM,它将懒惰地工作,以便我可以bs在 tail 仍在构建时使用 head of。

0 投票
2 回答
449 浏览

haskell - 我可以在 Haskell 中作为单个 IO 操作懒惰地读取 n 个文件吗?

如何使用恒定内存懒惰地将多个文件作为单个 ByteString 读取?

我目前有以下实现,但根据我从分析中看到的以及我的理解,我将以n-1内存中的文件结束。

我知道这里的缺陷是我正在应用 IO 操作然后重新包装它们,所以我认为我需要的是一种在foldl1 joinIOStrings不应用它们的情况下替换它们的方法。

0 投票
2 回答
349 浏览

clojure - 在重复处停止和拆分生成的序列 - clojure

我正在尝试制作一个只会生成值的序列,直到它找到以下条件并返回列出的结果:

案例头 =

  • 0 - 返回 {:origin [除 0 之外的所有生成] :pattern 0}
  • 1 - 返回 {:origin nil :pattern [all-generated-values] }
  • 重复值 - {:origin [values-before-repeat] :pattern [values-after-repeat]

{

在到达行尾之前停止的案例示例:

[9 8 4 5 6 7 4 ] - 重复“4”,因此停止。返回前面作为原点,其余作为模式。

[4 5 6 1] - 找到一个“1”所以停止,所以将所有内容作为模式返回

[3 0 ] - 找到一个 '0' 所以停止

:else 如果序列达到 x - 1 的长度:

问题

我已经成功地使用 partition-by 在找到重复值的点拆分组,但我想懒惰地这样做。有什么方法可以使用 take-while、condp 或 for 循环的 :while 子句来创建一个在发现重复时进行分区的条件?

一些尝试

# 更新

我真正想做的是找出一个值是否重复并在不使用索引的情况下对 seq 进行分区。那可能吗?像这样的东西-

{

}

0 投票
1 回答
172 浏览

clojure - 了解 Clojure 中延迟斐波那契实现的执行

我试图了解以下代码的执行:

这就是我希望执行的样子

这显然是不正确的,因为结果是错误的。我能想到的唯一产生正确结果的执行是:

这是执行过程中头部和尾部状态的正确“表示”吗?如果是这样,为什么(rest fibs)返回单个项目?是因为像 (rest (rest (rest [1 1 2 3]))) 这样的递归调用吗?

0 投票
3 回答
223 浏览

clojure - 惰性序列的实现时序

为什么是输出

不是

?

0 投票
2 回答
313 浏览

scala - 在可遍历视图上执行 foldLeft 时,Scala 中的类型差异错误

Traversable我正在尝试使用运算符在 Scala 中连接一系列视图,foldLeft并且遇到了我不理解的类型差异错误。

我可以像这样reduce连接一个Traversable视图列表。

(请注意,我必须在reduce参数上写类型注释:reduce(_ ++ _)不编译。我不明白为什么,也希望能得到解释。)

我还可以将列表分成头部和尾部并将它们连接起来。

但是,如果我尝试对 a 做同样的事情,foldLeft我会得到类型差异错误。

我怀疑这个问题与存在类型有关Traversable[_],但我无法弄清楚我到底做错了什么。我在上面的表达式中尝试了各种类型签名,但无济于事。从 Stackoverflow 上的其他问题来看, 的类型有些棘手foldLeft,但我找不到解决此问题的问题。

为了比较,相同的算法Stream可以顺利运行。

以上是我想要做的,除了我想使用视图而不是Stream因为我不需要记住我的所有结果。

这似乎是一个奇怪的要求。我想这样做的原因foldLeft是因为执行视图提供Traversable了一种有效的方法来实现惰性深度优先搜索

0 投票
1 回答
452 浏览

haskell - double stream feed to prevent unneeded memoization?

I'm new to Haskell and I'm trying to implement Euler's Sieve in stream processing style.

When I checked the Haskell Wiki page about prime numbers, I found some mysterious optimization technique for streams. In 3.8 Linear merging of that wiki:

And it says

“<strong>The double primes feed is introduced here to prevent unneeded memoization and thus prevent memory leak, as per Melissa O'Neill's code.”</p>

How could this be? I can't figure out how it works.

0 投票
1 回答
543 浏览

haskell - 流式处理中的高效欧拉筛

欧拉筛比埃拉托色尼筛具有更好的渐近复杂度,并且可以用命令式语言简单地实现。

我想知道是否有任何方法可以用流优雅地实现它。我已经检查了haskell wiki 关于素数的信息,但是这两种实现比该 wiki 中的其他筛子(甚至是试除法!)慢数百倍。

所以我尝试自己写:

minus类似于minusin Data.List.Ord

takeWhile'与 类似takeWhile,但有细微差别:takeWhile删除不满足谓词的第一个元素;takeWhile'会接受的。

lsp i返回 i 的有限乘积流,素数不超过 i 的最小素数。

可悲的是,我的实现运行速度非常慢......而且我找不到罪魁祸首。

无论如何,是否有可能以流处理方式实现高效的欧拉筛?还是该算法具有与流的本质相反的固有特性?

0 投票
1 回答
55 浏览

clojure - 将 LazySeqs 组合成一个地图集合

我正在尝试将几个 LazySeq 组合成一个地图集合。

进入

保证 LazySeq 的长度相同。这样做的功能性方法是什么?

0 投票
3 回答
3334 浏览

stream - 方案中的流 - 通过方案中的流映射定义整数

如何通过 Scheme 中的流映射定义整数: